从For循环内部编辑列表

时间:2017-10-21 13:23:05

标签: python python-3.x

假设我有一个列表mylist,我将其定义为[1, 2, 3, 4, 5]。如何在for循环中将列表的每个元素加倍?

我知道你可以这样做:

for i in range(len(mylist)):
    mylist[i] *= 2

我也知道你可以列出清单:

mylist = [2*i for i in range(1, 6)

但有没有办法像这样做?

for num in mylist:
   #code goes here

我尝试过这样的事情:

for num in mylist:
    num *= 2

num是一个局部变量,所以这不会修改mylist,而只是num。有谁知道这样做的好方法?

3 个答案:

答案 0 :(得分:4)

通常的方法是使用列表推导,直接遍历列表项,而不是通过索引间接迭代。

mylist = [1, 2, 3, 4, 5]
mylist = [2 * num for num in mylist]
print(mylist)

<强>输出

[2, 4, 6, 8, 10]

用新列表对象替换mylist。这通常没问题,但有时您想要修改现有对象,例如当其他对象引用mylist时。你可以通过切片分配来做到这一点。

mylist[:] = [2 * num for num in mylist]

答案 1 :(得分:1)

这是不可能的,因为你不应该尝试在以这种方式循环它时更改列表。我会坚持你另外两种操纵列表的方法

答案 2 :(得分:1)

使用显式for循环。迭代时使用enumerate并为每个项目分配一个新值。

mylist = [1, 2, 3, 4, 5]
for i, n in enumerate(mylist):
    mylist[i] = n * 2

请注意 - 不要更改列表中的项目数:Remove items from a list while iterating