python 有人能给我解释一下这个求和函数是怎么工作的吗?

mlnl4t2r  于 2023-01-19  发布在  Python
关注(0)|答案(3)|浏览(210)
def no_six_in_range(start, end):
    print(sum('6' not in str(i) for i in range(start, end + 1)))

no_six_in_range(6, 12)

“sum()函数返回一个数字,即可迭代对象中所有项的总和.”
所以我的问题是,在这个方程中求和是如何工作的,因为求和是把迭代加在一起的,但是当你运行代码的时候,它给出的数字比给定的数字要小,如果有人能给我解释一下,我会很感激的。

ozxc1zmp

ozxc1zmp1#

这里只计算没有任何数字的数字"6"。注意,这里的可迭代对象是整个生成器表达式expr_a for expr_b in expr_c。这里求和的值(expr_a

'6' not in str(i)

bool值(TrueFalse)。boolint的子类,因此对它们求和就是对一串10求和。
比较,例如:

>>> True + True
2
jk9hmnmh

jk9hmnmh2#

如果运行以下代码:

def no_six_in_range(start, end):
    print(list('6' not in str(i) for i in range(start, end + 1)))

no_six_in_range(6, 12)

您将获得:

[False, True, True, True, True, True, True]

因此,如果将它们相加,则会得到6,因为每个True为1,False为0

t5zmwmid

t5zmwmid3#

根据Python文档,
5.1.3.列表解析列表解析提供了一种简洁的方法来创建列表,常见的应用是创建新的列表,其中每个元素都是对另一个序列或可迭代序列的每个成员进行某些操作的结果,或者创建满足特定条件的元素的子序列。
列表解析求值为一个列表,就像求和函数声明的那样,它是一个可迭代的。
语法通常为:

l = [ iterator for iterator in iterable ]

例如:

my_list_comprehension = [ i for i in range(10) ]
  • 请注意,第一个可迭代对象和第二个可迭代对象可以不同,因此只要定义了b,[a for a in ARRAY]和[b for a in ARRAY]都可以工作 *

在本例中,代码实际上使用了一个 * Generator * 解析,它生成一个生成器而不是一个列表。生成器也可以被迭代。生成器解析的语法与列表的语法相同,只是用[]替换了()。
所以

'6' not in str(i) for i in range(start, end + 1)

当 * i * 经过 * range(start,end +1)* 时,将(不在str(i)中的"6")追加到生成器
正如其他答案所解释的那样,你可以打印出这些论点来弄清楚到底发生了什么,就像这样:

最后一个布尔数组通过求和转换成整数,然后相加。
关于generators in python的更多信息。

相关问题