如果我提供此功能:
def even(numbers):
numbers = [i for i in range(len (numbers)) if i % 2 == 0]
这些数字:
even([5, 4, 3, 2, 1])
我得到[0,2,4]
。 0来自哪里?
答案 0 :(得分:4)
您循环 range()
来电。这会产生0到您传入的len(numbers)
值之间的整数:
>>> numbers = [5, 4, 3, 2, 1]
>>> [i for i in range(len(numbers))]
[0, 1, 2, 3, 4]
由于此范围从0
开始,而0
被认为是偶数,因此您可以将结果包含在内。您的numbers
列表长度为5,因此range()
计数从0到4(结束值永远不会包含在结果范围内)。
如果您想循环遍历numbers
,请不要使用range()
:
[i for i in numbers if i % 2 == 0]
Python for
循环是Foreach loop constructs;它们可以直接在列表上循环,不需要生成索引。
答案 1 :(得分:1)
函数range
生成从0
到N
的值(不包括N
)。
所以打电话给
range(len (numbers))
将生成值[0, 1, 2, 3, 4]
如果您打算过滤掉奇数,可以将功能修改为
def even(numbers):
return [i for i in numbers if i%2 == 0]
>>> even([5,4,3,2,1])
[4, 2]
答案 2 :(得分:1)
range()
默认生成从0到n的数字,其中n是传递的参数值。您通过len([5, 4, 3, 2, 1])
评估为5
。
答案 3 :(得分:0)
写入范围(len(数字))将循环迭代“列表大小”的循环次数,从0开始,无论列表中的内容如何。因此将其改为以下:
def even(numbers):
numbers = [i for i in numbers if i % 2 == 0]
return numbers
print(even([5,4,3,2,1]))