Если и еще внутри однострочного python цикла - PullRequest
0 голосов
/ 09 марта 2020

Извините, если так просто; как я искал в другом месте, но никто не указал на эту конкретную проблему. Я хотел бы изучить python таким образом, чтобы сделать мой код компактным! Поэтому для этого я пытаюсь использовать однострочные (то есть короткие) циклы вместо многострочных, в частности, для циклов. Проблема возникает, когда я пытаюсь использовать однострочные, если и еще внутри однострочных циклов. Это просто не похоже на работу. Рассмотрим, например, следующее:

numbers = ... # an arbitrary array of integer numbers

over_30 = [number if number > 30 for number in numbers]

Это проблематично c, поскольку one-line if действительно нужно else после него. Хотя, когда я добавляю else к приведенному выше сценарию (после if): over_30 = [number if number > 30 else continue for number in numbers], это превращается в просто еще одну ошибку pythoni c.

Я знаю, что проблема на самом деле с одним -линии if и else, поскольку python необходимо определить значение, которое должно быть назначено левому оператору. Но есть ли обходной путь для конкретного c варианта использования этой схемы, как указано выше?

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Это разные синтаксисы. Тот, который вы ищете:

over_30 = [number for number in numbers if number > 30]

Это условное понимание списка. Предложение else на самом деле является безусловным пониманием списка в сочетании с троичным выражением:

over_30 = [number if number > 30 else 0 for number in numbers]

Здесь вы вычисляете троичное выражение (number if number > 30 else 0) для каждого number в numbers повторяемый.

0 голосов
/ 09 марта 2020

continue не будет работать, так как это троичное выражение, в котором вам нужно что-то вернуть.

val1 if condition else val2

Вы можете попробовать этот способ:

over_30 = [number for number in numbers if number > 30]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...