-2
A
回答
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
函數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]
1
range()
產生數默認情況下從0到n,其中n是傳遞的參數值。您通過了len([5, 4, 3, 2, 1])
,評估結果爲5
。
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]))
試試這個 - 「[我爲我在數字,如果我%2 == 0]'。你正在迭代索引範圍內的數字,而不是它自己的值。 – Kamehameha
數字= [我爲我在數字,如果我%2 == 0] 打印(數字),這工作完全謝謝你 – ibrahim
是的。這應該工作。要知道爲什麼,請查看很好解釋的答案:) – Kamehameha