遍历时修改列表

时间:2014-11-13 01:34:47

标签: python list-comprehension itertools

有没有办法在迭代时修改列表。我应该通过在项之间应用一些操作来生成列表,在遍历它时更新列表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

3 个答案:

答案 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]