2011-12-16 155 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