在python中使用list comprehension修改list元素

nos*_*nos 9 python list-comprehension

乡亲,

我想用list comprehension修改list元素.例如,如果元素为负数,则为其添加4.

因此列表

a = [1, -2 , 2]
Run Code Online (Sandbox Code Playgroud)

将被转换为

a = [1, 2, 2]
Run Code Online (Sandbox Code Playgroud)

以下代码有效,但我想知道是否有更好的方法来做到这一点?

谢谢.

for i in range(len(a)):
    if a[i]<0:
        a[i] += 4
Run Code Online (Sandbox Code Playgroud)

Ben*_*enH 16

a = [b + 4 if b < 0 else b for b in a]
Run Code Online (Sandbox Code Playgroud)

  • @nos:如果数据集太大而导致内存问题(比如它占用了RAM + Swap空间的一半),那么你可能不应该首先使用Python列表.(例如NumPy或[array](http://docs.python.org/library/array.html)). (5认同)
  • 如果列表a非常大,这会导致内存问题吗? (3认同)
  • 除非你知道数据集将是*巨大的*,否则我不会太担心它...而且,生成器表达式可以解决这些问题(尽管不是在这种情况下). (2认同)

ken*_*ytm 7

如果您想要就地更改列表,这几乎是最好的方法.列表理解将创建一个新列表.您也可以使用enumerate,并且必须完成分配a[i]:

for i, x in enumerate(a):
  if x < 0:
    a[i] = x + 4
Run Code Online (Sandbox Code Playgroud)