有没有办法在迭代时修改列表。我应该通过在项之间应用一些操作来生成列表,在遍历它时更新列表l
应该更简单。
我可以使用python或itertools中的任何隐藏功能将其作为一个行代码。
采取这个简单的例子。
l=[1,2,3,4,5]
a=[0]
for i,item in enumerate(l):
a+=[item**2-a[-1]]
l+=a
print l
应该是这样的:
for i,item in enumerate(l):
# Update List L
print l
答案 0 :(得分:1)
您可以改为迭代列表的副本,并修改原始文件:
print mylist
# [0, 1, 2, 3, 4, 5]
for item in mylist[:]:
mylist.append(item**2)
print mylist
# [0, 1, 2, 3, 4, 5, 0, 1, 4, 9, 16, 25]
答案 1 :(得分:0)
如果您添加/附加到列表,循环将继续添加的项目。
>>> L = [1]
>>> for i, j in enumerate(L):
... L.append(i + j)
... if L[-1] > 20:
... break
...
>>> L
[1, 1, 2, 4, 7, 11, 16, 22]
示例中棘手的部分是在原始列表的末尾停止
L = [1,2,3,4,5]
L.append(0)
for i in range(len(L) - 1):
L += [L[i] ** 2 - L[-1]]
print L
似乎有点做作,但如果你能告诉我们你的真实用例,或许还有一种更清洁的方式
答案 2 :(得分:0)
您可以在开头获取列表的长度,以避免在添加到同一列表时无限循环
l=[1,2,3,4,5]
item=0
for i in xrange(len(l)):
l.append(l[i]**2-item)
item=l[-1]
print l
#[1, 2, 3, 4, 5, 1, 3, 6, 10, 15]