修改列表元素与Python中的列表理解
问题描述:
我想修改列表元素与列表理解。例如,如果该元素为负数,则将其加4。
因此列表
a = [1, -2 , 2]
将被转换为
a = [1, 2, 2]
下面的代码工作,但我想知道是否有更好的方式来做到这一点?
谢谢。
for i in range(len(a)):
if a[i]<0:
a[i] += 4
答
a = [b + 4 if b < 0 else b for b in a]
答
为什么变异,当你可以返回一个看起来像你想要的新列表?
[4 + x if x < 0 else x for x in [1, -2, 2]]
答
这不是最新版本,它会在Python 2.4中
>>> [x < 0 and x + 4 or x for x in [1, -2, 2]]
0: [1, 2, 2]
工作对于Python的较新版本使用conditional expressions在亚当瓦格纳或BenH回答
答
试试这个:
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)
答
如果你想改变就地列表,这几乎是最好的办法。列表理解将创建一个新列表。你也可以使用enumerate
和分配必须做a[i]
:
for i, x in enumerate(a):
if x < 0:
a[i] = x + 4
如果列表是非常大的,会这样导致内存问题? – nos 2011-12-16 17:29:06