使用for循环更改python数组中的元素

时间:2015-03-06 09:17:14

标签: python for-loop

这是for python和for循环!我知道你可以使用其他迭代,我想知道是否使用FOR循环解决了这个问题。 我道歉如果这个重复,我不知道怎么用短语来搜索它。这是一个简单的问题。 我喜欢循环并经常使用它们,但是当需要在迭代时更改元素时,我似乎总是要创建一个包含已编辑元素的新数组。这是一个例子:

for item in list:
     if item > 7:
          item += 1

此案例中的项目不会返回到列表中。我发现我做了类似的事情:

newlist = []
    for item in list:
         if item > 7:
             item += 1
        newlist.append(item)

这不是一个大问题,但每次我写出与此类似的代码时,我都想知道是否有一种更简单的方法,而且不会创建新的变量。

上面的示例使用内置变量名称,它只是一个示例,而不是任何人应该如何实现for循环或声明变量

2 个答案:

答案 0 :(得分:5)

你可以做的一件事

for i, item in enumerate(my_list):
  if item > 7:
    my_list[i] += 2

答案 1 :(得分:1)

您可以使用生成器表达式或列表推导来更改原始列表:

lst = [1,3,5,7,8,9,10]

lst[:] = (i + 1 if i > 7 else i for i in lst)

print(lst)
[1, 3, 5, 7, 9, 10, 11]

使用列表comp:

 lst[:] = [i + 1 if i > 7 else i for i in lst]

[:]语法会更改原始列表。

效率更高:

In [18]: %%timeit
my_list = list(range(10000))
for i, item in enumerate(my_list):
  if item > 7:
    my_list[i] += 1
   ....: 
100 loops, best of 3: 2.04 ms per loop

In [19]: %%timeit
lst = list(range(10000))
lst[:] = (i + 1 if i > 7 else i for i in lst)
   ....: 

1000 loops, best of 3: 1.55 ms per loop

In [20]: %%timeit
lst = list(range(10000))
lst[:] = [i + 1 if i > 7 else i for i in lst]
   ....: 
1000 loops, best of 3: 1.28 ms per loop