изменить элемент списка с пониманием списка в python - PullRequest
9 голосов
/ 16 декабря 2011

люди

Я хочу изменить элемент списка с пониманием списка. Например, если элемент отрицательный, добавьте 4 к нему.

Таким образом, список

a = [1, -2 , 2]

будет преобразовано в

a = [1, 2, 2]

Следующий код работает, но мне интересно, есть ли лучший способ сделать это?

Спасибо.

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

Ответы [ 5 ]

16 голосов
/ 16 декабря 2011
a = [b + 4 if b < 0 else b for b in a]
7 голосов
/ 16 декабря 2011

Если вы хотите изменить список на месте , это почти лучший способ. Понимание списка создаст новый список. Вы также можете использовать enumerate, и присвоение должно быть выполнено для a[i]:

for i, x in enumerate(a):
  if x < 0:
    a[i] = x + 4
3 голосов
/ 16 декабря 2011

Эта версия старше, она будет работать на Python 2.4

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

Для более новых версий Python используйте условные выражения как в ответах Адама Вагнера или BenH

2 голосов
/ 16 декабря 2011

Попробуйте это:

 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)
1 голос
/ 16 декабря 2011

Зачем изменять, если вы можете просто вернуть новый список, который выглядит так, как вы этого хотите?

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