Это больше о синтаксисе понимания списка Python. У меня есть понимание списка, которое производит список нечетных чисел данного диапазона:
[x for x in range(1, 10) if x % 2]
Это делает фильтр - у меня есть список источников, где я удаляю четные числа ( if x % 2
). Я хотел бы использовать что-то вроде «если-то-еще» здесь. Следующий код не работает:
>>> [x for x in range(1, 10) if x % 2 else x * 100]
File "<stdin>", line 1
[x for x in range(1, 10) if x % 2 else x * 100]
^
SyntaxError: invalid syntax
Есть выражение на python, как if-else:
1 if 0 is 0 else 3
Как использовать это в понимании списка?
()
вместо[]
.if x % 2
удаляю четные числа (вместо того, чтобы хранить их) - это потому, что когдаx
получается дажеx % 2
выражение0
, которое, в свою очередь, оцениваетFalse
, в то время как любое,int
кроме,0
оцениваетTrue
.Ответы:
x if y else z
это синтаксис выражения, которое вы возвращаете для каждого элемента. Таким образом вам нужно:Путаница возникает из-за того, что вы используете фильтр в первом примере, а не во втором. Во втором примере вы только отображаете каждое значение в другое, используя выражение троичного оператора.
С фильтром вам нужно:
Без фильтра вам нужно:
и во втором примере выражение является «сложным» и включает в себя
if-else
.источник
[x for x in range(1, 10) if x % 2]
правильный синтаксис.[x if x % 2 for x in range(1, 10)]
- это не так, но[x if x%2 else x*100 for x in range(1, 10)]
опять-таки правильный синтаксис. Как придешь?else
), ни фильтр (так как онEXP
входит в состав списка)if
в конце можно добавить секунду :[x if x%2 else x*100 for x in range(1, 10) if not x%3]
первыйif
является частью троичного оператора, второйif
- частью синтаксиса понимания списка. Целоеx if x%2 else x*100
«на одном уровне», как простое2*x
, это выражение для оценки в левой частиfor
, когда фильтрацияif not x%3
уже произошла.for i in x:
и затем в цикле forif i == y:
?источник
Вы можете сделать это с помощью понимания списка:
источник
Просто другое решение, надеюсь, кому-то это понравится:
Использование: [False, True] [Expression]
источник
Я смог сделать это
источник