我有一个列表,我想将相同的元素附加到其自身上。
myList = [1,2,3]
使用 for...range 这样做是可以的:
for i in range(len(myList)):
myList.append(myList[i])
print(myList) # [1,2,3,1,2,3]
但使用 for...in 会导致无限循环:
for i in myList:
myList.append(i)
# infinite loop
这是为什么?我的猜测是in range(len(myList))
只评估一次,但是in myList
每次迭代都会重新评估?这就是 python 的工作原理吗?
他们都被评估一次。问题是myList
是一个可变对象,列表迭代器不会复制列表,这意味着只要您在循环内不断追加项目,迭代器就始终会产生一个新值。
range(len(myList))
评估为range(3)
。这个范围对象不知道列表,当它改变大小时,不会改变范围(也不可能,因为范围对象在Python中是不可变的)。
如果你想循环遍历你计划改变的列表,更好的选择是复制它:
for item in myList[:]:
myList.append(item)
该副本不会发生变异,因此它只会运行有限的次数。
正如 Ghost Ops 提到的,将列表元素附加到自身的最佳方法是myList.extend(myList)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)