人,
我想用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
答案 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]]