按索引更新列表元素

2024-04-19 14:53:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用列表理解为我的特定列表索引添加5个

输入

arr=[0,0,0,0,0]

输出

^{pr2}$

我试过了

[arr[i]+=5 for i in range(2,4)]

但它给出了一个错误。在


Tags: in列表for错误rangearrpr2
3条回答

不要对副作用使用列表理解。列表比较的目的是创建一个新列表。为此,我相信您可以在这里使用enumerate+range

l, u = 2, 4
arr = [x + 5 if i in range(l, u + 1) else x for i, x in enumerate(arr)]

print(arr)
[0, 0, 5, 5, 5]

在python3中,这应该非常有效,因为对range对象的in检查是O(1)时间。在python2上,执行布尔检查会更快(这就是python3中in检查range所做的)——

^{pr2}$

但是,请记住,for循环是这里使用的最有效的方法。在

for i in range(l, u + 1):
    arr[i] += 5

print(arr)
[0, 0, 5, 5, 5]

因为

  1. 您只需迭代所需的索引。不多不少
  2. 您可以就地进行更改,而不是创建新的list

也可以通过在此处切片来使用添加列表:

arr[0:2] + [i+5 for i in arr[2:5]]

[0, 0, 5, 5, 5]

也可以尝试不使用for循环,如下所示:

list_1=[0,0,0,0,0]
b=list(range(2,5))
list(map(lambda x,y:list_1.__setitem__(x,list_1[x]+5),b,list_1))
print(list_1)

输出:

^{pr2}$

相关问题 更多 >