for x in [temp for temp in xlist if temp<=xmax]:
这段代码可以工作,但看起来像是一种不必要的外国口吃方式来启动 for 循环。
有更简洁的语法吗?
for x in [temp for temp in xlist if temp<=xmax]:
这段代码可以工作,但看起来像是一种不必要的外国口吃方式来启动 for 循环。
有更简洁的语法吗?
你想在这里做什么?
for x in xlist:
if x > xmax: continue
将工作。(你的 for 循环的其余部分是做什么的?)如果它可以只使用 list-comp 来完成,那可能是要走的路。如果不能,那么您可能想要上面的成语,或者您将在此处发布的其他答案中看到的一些变体。
为什么不filter
呢?
filter(function, iterable)
filter(function, iterable)
相当于[item for item in iterable if function(item)]
在你的情况下:
filter(lambda item: item <= xmax, xlist)
for x in xlist:
if x <= xmax:
#do stuff
顺便说一句,如果可能,您希望在原始版本中使用生成器表达式,因为这不会预先创建不必要的列表。
for x in (temp for temp in xlist if temp <= xmax):
#etc.
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 答案,该答案表明您可以将整个代码重写为列表理解。