Как я могу объединить условное выражение с циклом for в Python?

У меня есть простой пример, который я нарисовал. Я думал, что в Python можно комбинировать операторы if и циклы for с минимальными усилиями. Данный:

sublists = [number1, number2, number3]

for sublist in sublists:
    if sublist:
        print(sublist)

Я думал, что смогу сократить цикл for до:

for sublist in sublists if sublist:

но это приводит к недопустимому синтаксису. Я не слишком разбираюсь в этом примере, мне просто нужен метод одной подкладки простых операторов if с циклами.


person feyd    schedule 21.08.2018    source источник
comment
Вы можете использовать filter или выражение для понимания/генератора списка, но оно, вероятно, не будет короче, чем первая версия, и, вероятно, менее читабельно. Просто используйте первую версию.   -  person jonrsharpe    schedule 21.08.2018
comment
Я считаю, что синтаксис python не предоставляет для этого какой-либо специальной краткой формы, кроме случая, когда вы хотите создать только новую итерацию. Если вы действительно хотите зацикливаться в более широком смысле, вы можете выбрать свой стиль из различных вариантов, которые появляются в ответах, или придерживаться своего оригинального стиля, защищенного от идиотов. Без сахара для этого..   -  person matanster    schedule 15.11.2020


Ответы (3)


если вы хотите отфильтровать все пустые подсписки из ваших исходных подсписков, вам нужно будет сделать что-то вроде ниже. это даст вам весь непустой подсписок.

print([sublist for sublist in sublists if sublist])

*отредактировано для синтаксиса

person Radan    schedule 21.08.2018
comment
Вот он, такой чистый! Думаю, это нужно для печати (), но я отмечу это как ответ, потому что это именно то, что я искал. - person feyd; 21.08.2018
comment
Спасибо, очень рад, что помог :) Ура! - person Radan; 21.08.2018

Сразу же решил это в интерпретаторе сразу после того, как я разместил.

for x in ( x for x in sublists if x ):

Не так чисто, как хотелось бы, вложенный оператор if, на мой взгляд, более удобочитаем. Я открыт для других предложений, если есть более чистый способ.

person feyd    schedule 21.08.2018
comment
Наиболее близок к стилю, который искали ОП, хотя, вероятно, не слишком разборчив для многих людей, которые очень быстро прочитали бы эту строку. Меньше строк, но на самом деле не более лаконично, чем оригинал. - person matanster; 15.11.2020

Я думаю, что вы не можете упростить синтаксис до однострочного в python, но действительно должны печатать все цепочки строк для циклов и операторов if.

Исключением являются списки (см. здесь в 5.1.3). Их можно использовать для создания новых списков из списков. Пример:

test_list = ["Blue Candy", "Apple", "Red Candy", "Orange", "Pear", "Yellow Candy"]
candy_list = [x for x in test_list if "Candy" in x]
person cripcate    schedule 21.08.2018
comment
Спасибо, я почитаю о пониманиях больше, потому что это лучший метод для таких проблем. - person feyd; 21.08.2018
comment
Могу ли я включить здесь оператор else? - person cis; 04.01.2020