2010-11-23 2 views
467

Как я могу сделать следующее в Python?if/else в понимании списка Python?

row = [unicode(x.strip()) for x in row if x is not None else ''] 

По существу:

  1. заменить все ноны с пустыми строками, а затем
  2. выполняют функцию.
+3

возможно дубликат [? Можно ли использовать «еще» в списке питон понимания] (http://stackoverflow.com/questions/2951701/is-it- возможное использование-else-in-a-python-list-comprehension) – 2014-07-25 18:36:25

ответ

734

Вы можете полностью сделать это, это просто вопрос упорядочения:

[ unicode(x.strip()) if x is not None else '' for x in row ] 

Обратите внимание, что это на самом деле использует другой конструкции языка, conditional expression, которая сама по себе не является частью comprehension syntax, в то время как if после того, как for…in является частью списка со списком и используется для связи с фильтром элементов из исходников итерируемых.

Условные выражения могут использоваться во всех ситуациях, когда вы хотите выбрать между двумя значениями выражения на основе некоторого условия. Это делает то же самое, что и ternary operator ?: that exists in other languages. Например:

value = 123 
print(value, 'is', 'even' if value % 2 == 0 else 'odd') 
+86

Обратите внимание, что if/else здесь является синтаксисом «тройной оператор», а не синтаксисом описания списка. – 2010-11-23 20:04:11

+1

Учитывая предыдущий вопрос OP, замечание Адама очень важно! – delnan 2010-11-23 20:06:04

30

Один из способов:

def change(f): 
    if f is None: 
     return unicode(f.strip()) 
    else: 
     return '' 

row = [change(x) for x in row] 

Хотя тогда у вас есть:

row = map(change, row) 

Или вы можете использовать лямбда-инлайн.

25

Вот еще один иллюстративный пример:

>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!") 
Ha, ha, ha! 

Он использует тот факт, что if i оценивает, чтобы False для 0 и True для всех других значений, полученных с помощью функции range(). Поэтому список понимание вычисляется по следующей схеме:

>>> ["ha" if i else "Ha" for i in range(3)] 
['Ha', 'ha', 'ha'] 
Смежные вопросы