Замена элементов, удовлетворяющих особым условиям в List, на Python функциональным способом - PullRequest
0 голосов
/ 02 октября 2011

У меня есть список [1, 2, 3, -100, 2, -100].Мне нужно заменить -100 на "ERROR", а другие на соответствующие им строки.

Я мог бы написать такой код.

resList = []
for val in list:
    if val == -100:
        resList.append("ERROR")
    else:
        resList.append("%d" % val)

Как я могу сделать то же самое функциональным способом.

Я попытался сопоставить.

resList = map(lambda w: if w == -100: "ERROR" else:("%d" % val), list)

Однако он не компилируется, так как имеет синтаксисошибка.Что с ними не так?

Ответы [ 5 ]

2 голосов
/ 02 октября 2011

Это не работает:

resList = map(lambda w: if w == -100: "ERROR" else:("%d" % val), list)

Сбой, потому что вы не можете иметь блок внутри лямбда-выражения.

Я предпочитаю понимание списка подхода:

resList = ['ERROR' if item == -100 else item for item in yourlist]

Это не должно генерировать никаких ошибок.Если вы получаете ошибки, это потому, что есть ошибки в других местах вашей программы.Или, возможно, отступ не так.Отправьте конкретное сообщение об ошибке, которое вы получите.

Кроме того, я бы посоветовал вам не использовать имя list для локальных переменных, поскольку оно скрывает встроенное имя с тем же именем.

1 голос
/ 02 октября 2011

Карта будет работать, если вы правильно используете троичный оператор python и параметр лямбда "w".

1 голос
/ 02 октября 2011

это работает:

["ERROR" if -100 == val else str(val) for val in list]
0 голосов
/ 02 октября 2011

Это странно выглядящий код, но он работает:

resList = ["%s%s" % ("ERROR" * (val == -100), ("%d" % val) * (val != -100)) for val in list]

производит:

['1', '2', '3', 'ERROR', '2', 'ERROR']
0 голосов
/ 02 октября 2011

Этот код сделает это:

list = [1, 2, 3, -100, 2, -100]
resList = ['ERROR' if x == -100 else str(x) for x in list ]
...