Я знаю, как использовать как циклы, так и операторы 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?
Мне понравилось ответ 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)