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
if
。 - Rohit Jain您在问题中提到的没有特殊的语法,但是您可以在for
循环中使用if
语句,就像在其他任何编程语言中一样:
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
filter()
中省略函数将提取仅为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循环与内联生成表达式结合使用,例如for x in (y for y in items if y > 3):
,与上述选项相比显得很丑陋。
for x in items if x>10:
。 - Michael Andersonitertools.ifilter
的用法? - Sebastián Vansteenkistefilter
函数,是的,这对于编写某些东西更方便。我应该开始关注性能,到目前为止,我已经尽可能使生成器表达式易读,但在我坐下来用时钟测量之前,我可能不知道我的解决方案是否“足够好”。 - Sebastián Vansteenkiste