Питонический способ комбинировать цикл FOR и оператор IF

Я знаю, как использовать как циклы, так и операторы if в отдельных строках, например:

>>> a = [2,3,4,5,6,7,8,9,0]
... xyz = [0,12,4,6,242,7,9]
... for x in xyz:
...     if x in a:
...         print(x)
0,4,6,7,9

И я знаю, что могу использовать понимание списка, чтобы объединить их, когда операторы простые, например:

print([x for x in xyz if x in a])

Но я нигде не могу найти хороший пример (для копирования и изучения), демонстрирующий сложный набор команд (а не просто «print x»), которые возникают после комбинации цикла for и некоторых Если я ожидал, что это будет выглядеть примерно так:

for x in xyz if x not in a:
    print(x...)

Не так ли должен работать python?

243
задан simonzack 18 September 2014 в 02:24
поделиться

1 ответ

Мне понравилось ответ Alex , потому что фильтр точно , если относился к списку, поэтому если Вы хотите исследовать подмножество списка, учитывая условие, это, кажется, самый естественный путь

mylist = [1,2,3,4,5]
another_list = [2,3,4]

wanted = lambda x:x in another_list

for x in filter(wanted, mylist):
    print(x)

, этот метод полезен для разделения проблем, если изменения функции условия, единственный код для игры с является самой функцией

mylist = [1,2,3,4,5]

wanted = lambda x:(x**0.5) > 10**0.3

for x in filter(wanted, mylist):
    print(x)

генератор , метод кажется лучше, когда Вы не хотите членов списка, но модификация упомянутых участников, которая кажется более пригодной генератор

mylist = [1,2,3,4,5]

wanted = lambda x:(x**0.5) > 10**0.3

generator = (x**0.5 for x in mylist if wanted(x))

for x in generator:
    print(x)

кроме того, фильтрует работу с генераторами, хотя в этом случае это не эффективно

mylist = [1,2,3,4,5]

wanted = lambda x:(x**0.5) > 10**0.3

generator = (x**0.9 for x in mylist)

for x in filter(wanted, generator):
    print(x)

, Но конечно, все еще было бы хорошо записать как это:

mylist = [1,2,3,4,5]

wanted = lambda x:(x**0.5) > 10**0.3

# for x in filter(wanted, mylist):
for x in mylist if wanted(x):
    print(x)
0
ответ дан 23 November 2019 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: