【发布时间】:2021-07-23 22:31:52
【问题描述】:
我正在处理一个列表,我注意到了一些东西。
例如,这段代码在循环遍历列表时从列表中删除奇数。
numbers=[x for x in range (100)]
for nb in numbers:
if nb%2 == 1:
del numbers[numbers.index(nb)]
当您添加一个计数器以查看您获得的总迭代次数时:
numbers=[x for x in range (100)]
counter=0
for nb in numbers:
if nb%2 == 1:
del numbers[numbers.index(nb)]
counter +=1
结果是计数器 = 51。
但是,如果在 for 循环中添加运算符 list():
numbers=[x for x in range (100)]
counter=0
for nb in list(numbers):
if nb%2 == 1:
del numbers[numbers.index(nb)]
counter +=1
这次的结果是 counter = 100。
我想知道这里操作员list()的作用和作用是什么。
注意:如果您打印 numbers 和 list(numbers),它们是相同的。
【问题讨论】:
-
在第一种情况下,您在迭代列表时正在修改列表,这是一种不好的做法,会导致您观察到的奇怪行为。在第二种情况下,您正在迭代列表的副本,然后修改原始列表。这很好,可以产生您期望的结果。