python - 通过索引更新列表元素

标签 python list list-comprehension

<分区>

我想使用列表理解将 5 添加到我的特定列表索引

输入

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

输出

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

我试过了

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

但它给出了一个错误。

最佳答案

不要对副作用使用列表理解。列表组合的目的是创建一个新列表。为此,我相信您可以在此处使用 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 中,这应该是非常有效的,因为 in 检查 range 对象是 O(1) 时间。在 python2 上,执行 bool 检查会更快(这是 in 在 python3 中对 range 所做的检查)-

arr = [x + 5 if l <= i <= u else x for i, x in enumerate(arr)]

但是,请记住,for 循环是此处使用的最有效方法。

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

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

因为,

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

关于python - 通过索引更新列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47958793/

相关文章:

python - 查找 python 线程状态(无论是 sleep 还是事件)

python - 如果元组在 Python 中可以为空,如何按最后一个元素对元组列表进行排序?

r - 从数据框列表中获取列 R

python - Django DateField 默认选项

python - timeit 与计时装饰器

python - 使用 Pandas 从列表的一列中减去另一列中的值

python - 不使用可迭代的列表理解

Python List-comprehension 和多次引用一个对象

haskell - Haskell列表生成器中的生成器不起作用

python - Networkx Graph 获取每个节点的序列号