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
(py2) / filter
(py3) 是另一种选择:
items = [1,2,3,4,5,6,7,8]
odd = lambda x: x % 2 > 0
for x in filter(odd, items):
print(x)
你的意思是这样的: -
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
这两种枯燥的方法几乎和特殊语法一样简洁易读。
Python 3 和 Python 2.7 都具有filter()
允许从函数(在下面的示例中,即 lambda 函数)返回的列表中提取项目的函数True
:
>>> nums=[1,2,3,4,5,6,7,8]
>>> for item in filter(lambda x: x>5,nums):
... print(item)
...
6
7
8
省略函数 infilter()
将仅提取True
中所述的项目pydoc filter
您可以使用显式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)
这可能是品味问题,但我发现与for x in (y for y in items if y > 3):
上述选项相比,与内联的genexpr 相结合的for循环很难看。