Конкретная проблема уже была решена в предыдущих ответах, поэтому я остановлюсь на общей идее использования условных выражений внутри списочных пониманий.
Вот пример, который показывает, как условные выражения могут быть записаны в понимании списков:
X = [1.5, 2.3, 4.4, 5.4, 'n', 1.5, 5.1, 'a'] # Original list
# Extract non-strings from X to new list
X_non_str = [el for el in X if not isinstance(el, str)] # When using only 'if', put 'for' in the beginning
# Change all strings in X to 'b', preserve everything else as is
X_str_changed = ['b' if isinstance(el, str) else el for el in X] # When using 'if' and 'else', put 'for' in the end
Обратите внимание, что в первом понимании списка для X_non_str
порядок:
выражение для item в повторяемость , если условие
и в последнем понимании списка для X_str_changed
, порядок:
выражение1 если условие еще выражение2 для элемент в повторяемость
Мне всегда трудно вспомнить, что expresseion1 должно быть до , если и expression2 должно быть после else .Моя голова хочет, чтобы оба были либо до, либо после.
Полагаю, он так устроен, потому что напоминает обычный язык, например: "Я хочу остаться внутри , если дождь, иначе Я хочу выйти на улицу"