2011-12-16 118 views
6

伙计,修改列表元素与Python中的列表理解

我想修改列表元素与列表理解。例如,如果该元素为负数,则将其加4。

因此列表

a = [1, -2 , 2] 

将被转换为

a = [1, 2, 2] 

下面的代码工作,但我想知道是否有更好的方式来做到这一点?

谢谢。

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

回答

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

如果列表是非常大的,会这样导致内存问题? – nos 2011-12-16 17:29:06

1

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

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

这不是最新版本,它会在Python 2.4中

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

工作对于Python的较新版本使用conditional expressions在亚当瓦格纳或BenH回答

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) 
6

如果你想改变就地列表,这几乎是最好的办法。列表理解将创建一个新列表。你也可以使用enumerate和分配必须做a[i]

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