Подтвердить что ты не робот

Условный для Python

Есть ли у Python что-то вроде ниже?

for item in items #where item>3:
  #.....

Я имею в виду Python 2.7 и Python 3.3 вместе.

4b9b3361

Ответ 1

Вы можете комбинировать цикл с выражением генератора :

for x in (y for y in items if y > 10):
    ....

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

Ответ 2

Вы имеете в виду что-то вроде этого: -

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

Ответ 3

В вашем вопросе нет специального синтаксиса, такого как 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

Оба этих скучных подхода почти так же кратки и понятны, как и специальный синтаксис для этого.

Ответ 4

Вы можете использовать явный оператор 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):, будет уродливым по сравнению с вышеуказанными параметрами.

Ответ 5

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