2011-12-16 6 views
6

people,изменить элемент списка со списком в 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

+0

Не знаю. Я бы предположил, что это создает новый список, который должен храниться где-то, прежде чем он будет скопирован на a, поэтому, вероятно. – BenH

+2

Если вы не знаете, что набор данных будет * огромным *, я бы не стал слишком беспокоиться об этом ... Кроме того, генераторные выражения могут пройти долгий путь для решения таких проблем (не в этом случае, хотя). –

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 
Смежные вопросы