1

我想知道是否有类似的方法来在 for 循环中强制执行 if 子句,因为它在列表理解中。所以我希望有一个类似的结构

[ expression for item in list if conditional ]

在一个循环中,所以像

for item in list if conditional:
    expression

我知道我可以在下一行添加条件,但是我想知道是否可以在 for 循环中构建

4

3 回答 3

5

您可以使用生成器理解

for item in ( x for x in list if condition(x) ):
    pass

这很混乱,想想吧。使用单独的 if 语句;它使您的代码结构更好,并且您希望代码结构更好。

于 2012-12-04T14:40:45.117 回答
2

不幸的是,没有比以下更好的方法了:

for item in iterable:
    if not conditional:
        continue
    # whatever

您可以创建一个生成器,但通常这有点矫枉过正:

iteritems = (item for item in iterable if conditional)
for item in iteritems:
    pass # whatever

当然,您可以进一步压缩它:

for item in (item for item in iterable if conditional):
    pass # whatever

但我真的不再称它为漂亮了。continue让我们在这种情况下保持良好状态。

于 2012-12-04T14:40:06.663 回答
0

一般来说,我会采用@ThiefMaster 的方法。如果您正在寻找另一种方法(有时我会这样做,这取决于条件的简洁程度以及它与实际“做”部分的集成程度),您可以走功能路线并使用 filter().. .

for item in filter(lambda x: conditional, iterable):
    pass #whatever 
于 2012-12-04T18:39:05.160 回答