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

时间:2011-12-16 17:21:26

标签: python list-comprehension

人,

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

因此列表

a = [1, -2 , 2]

将转换为

a = [1, 2, 2]

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

感谢。

for i in range(len(a)):
    if a[i]<0:
        a[i] += 4

5 个答案:

答案 0 :(得分:16)

a = [b + 4 if b < 0 else b for b in a]

答案 1 :(得分:6)

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

for i, x in enumerate(a):
  if x < 0:
    a[i] = x + 4

答案 2 :(得分:3)

此版本较旧,适用于Python 2.4

>>> [x < 0 and x + 4 or x for x in [1, -2, 2]]
0: [1, 2, 2]

对于较新版本的Python,使用像{@ 3}},如Adam Wagner或BenH回答

答案 3 :(得分:2)

试试这个:

 b = [x + 4 if x < 0 else x for x in a]

或者如果您更喜欢map列表理解:

 b = map(lambda x: x + 4 if x < 0 else x, a)

答案 4 :(得分:1)

为什么要变异,何时可以返回一个看起来像你想要的新列表?

[4 + x if x < 0 else x for x in [1, -2, 2]]