Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用列表理解修改列表元素_Python_List Comprehension - Fatal编程技术网

在python中使用列表理解修改列表元素

在python中使用列表理解修改列表元素,python,list-comprehension,Python,List Comprehension,各位 我想用列表理解修改列表元素。例如,如果元素为负,则向其添加4 因此,名单 a = [1, -2 , 2] 将转换为 a = [1, 2, 2] 下面的代码可以工作,但我想知道是否有更好的方法来完成它 谢谢 for i in range(len(a)): if a[i]<0: a[i] += 4 对于范围内的i(len(a)): 如果一个[i]为什么要变异,当你可以返回一个看起来像你想要的新列表时 [4 + x if x < 0 else x for

各位

我想用列表理解修改列表元素。例如,如果元素为负,则向其添加4

因此,名单

a = [1, -2 , 2]
将转换为

a = [1, 2, 2]
下面的代码可以工作,但我想知道是否有更好的方法来完成它

谢谢

for i in range(len(a)):
    if a[i]<0:
        a[i] += 4
对于范围内的i(len(a)):

如果一个[i]为什么要变异,当你可以返回一个看起来像你想要的新列表时

[4 + x if x < 0 else x for x in [1, -2, 2]]
[4+x如果x<0,则x为[1,-2,2]]
a=[b+4如果b<0,则为b,否则为a中的b]

此版本较旧,可以在Python 2.4上使用

>>> [x < 0 and x + 4 or x for x in [1, -2, 2]]
0: [1, 2, 2]
>>[x<0和x+4或x代表[1,-2,2]中的x]
0: [1, 2, 2]
对于较新版本的Python,如Adam Wagner或BenH answers中所述,请尝试以下方法:

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

如果您想更改列表,这几乎是最好的方法。列表理解将创建一个新列表。您还可以使用
枚举
,并且必须对
a[i]
进行赋值:

for i, x in enumerate(a):
  if x < 0:
    a[i] = x + 4
枚举(a)中的i,x的
:
如果x<0:
a[i]=x+4

如果列表a很大,这样会导致内存问题吗?我不知道。我猜这会创建一个新的列表,它必须存储在某个地方,然后才能复制到,所以很可能。除非你知道数据集将是巨大的,否则我不会太担心它。。。此外,生成器表达式在解决此类问题方面也有很大的帮助(但在本例中并非如此)。@nos:如果数据集太大,可能会导致内存问题(比如它占用了RAM+交换空间的一半),那么您可能不应该首先使用Python列表。(例如NumPy或)。
 b = map(lambda x: x + 4 if x < 0 else x, a)
for i, x in enumerate(a):
  if x < 0:
    a[i] = x + 4