Есть ли у Python что-то вроде ниже?
for item in items #where item>3:
#.....
Я имею в виду Python 2.7 и Python 3.3 вместе.
Есть ли у Python что-то вроде ниже?
for item in items #where item>3:
#.....
Я имею в виду Python 2.7 и Python 3.3 вместе.
Вы можете комбинировать цикл с выражением генератора :
for x in (y for y in items if y > 10):
....
itertools.ifilter - еще один вариант - и даже предпочтительный, когда имеет значение эффективность, например. на большом наборе данных.
Вы имеете в виду что-то вроде этого: -
item_list = [item for item in items if item > 3]
Или вы можете использовать выражение Generator
, которое не будет создавать новый список, а возвращает генератор, который затем возвращает следующий элемент на каждой итерации с помощью метода yield
: -
for item in (item for item in items if item > 3):
# Do your task
В вашем вопросе нет специального синтаксиса, такого как where
, но вы всегда можете просто использовать инструкцию if
в своем цикле for
, как на любом другом языке:
for item in items:
if item > 3:
# Your logic here
или предложение охраны (опять же, как и любой другой язык):
for item in items:
if not (item > 3): continue
# Your logic here
Оба этих скучных подхода почти так же кратки и понятны, как и специальный синтаксис для этого.
Вы можете использовать явный оператор if
:
for item in items:
if item > 3:
# ...
Или вы могли бы создать генератор, если вам понадобится имя для итерации позже, пример:
filtered_items = (n for n in items if n > 3)
Или вы можете передать его функции:
total = sum(n for n in items if n > 3)
Это может быть вопросом вкуса, но я считаю, что для цикла в сочетании с inlined genexpr, например for x in (y for y in items if y > 3):
, будет уродливым по сравнению с вышеуказанными параметрами.
Python 3 и Python 2.7 имеют функцию filter()
, которая позволяет извлекать элементы из списка, для которого функция (в приведенном ниже примере, эта лямбда-функция) возвращает True
:
>>> nums=[1,2,3,4,5,6,7,8]
>>> for item in filter(lambda x: x>5,nums):
... print(item)
...
6
7
8
Функция опускания в filter()
будет извлекать только те элементы, которые True
, как указано в pydoc filter