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

Altering elements in a python array using the for loop

这是为了 python 和 for 循环!我知道您可以使用其他迭代,我想知道是否有使用 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循环或声明变量

您可以做的事情之一

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

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

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]

使用列表组件:

 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