3
for x in [temp for temp in xlist if temp<=xmax]: 

这段代码可以工作,但看起来像是一种不必要的外国口吃方式来启动 for 循环。

有更简洁的语法吗?

4

4 回答 4

4

你想在这里做什么?

for x in xlist:
    if x > xmax: continue

将工作。(你的 for 循环的其余部分是做什么的?)如果它可以只使用 list-comp 来完成,那可能是要走的路。如果不能,那么您可能想要上面的成语,或者您将在此处发布的其他答案中看到的一些变体。

于 2012-07-02T14:37:32.473 回答
0

为什么不filter呢?

filter(function, iterable)

filter(function, iterable)相当于[item for item in iterable if function(item)]

在你的情况下:

filter(lambda item: item <= xmax, xlist)
于 2012-07-02T14:41:32.337 回答
0
for x in xlist:
    if x <= xmax:
        #do stuff

顺便说一句,如果可能,您希望在原始版本中使用生成器表达式,因为这不会预先创建不必要的列表。

for x in (temp for temp in xlist if temp <= xmax):
    #etc.
于 2012-07-02T14:38:21.160 回答
0
for x in filter(lambda x: x<=xmax, xlist):
    pass
# or with itertools (faster on python2, on py3 these are equivalent):
import itertools
for x in itertools.ifilter(lambda x: x<=xmax, xlist):
    pass

但也请查看@mgilson 答案,该答案表明您可以将整个代码重写为列表理解。

于 2012-07-02T14:39:19.813 回答