可以简化查找多个列表中是否存在元素的情况?

时间:2014-05-22 15:56:30

标签: python syntax

这是我的Python代码,它可以使用但是......我确信有一种方法可以简化这个长代码。

if partialAnswer in primaryTrees or partialAnswer in secondaryTrees or partialAnswer in tertiaryTrees:

对此有什么好的答案吗?

5 个答案:

答案 0 :(得分:3)

您可以使用anygenerator expression

if any(partialAnswer in x for x in (primaryTrees, secondaryTrees, tertiaryTrees)):

参见下面的演示:

>>> listA = [1, 2, 3]
>>> listB = [4, 5, 6]
>>> listC = [7, 8, 9]
>>> n = 9
>>> any(n in x for x in (listA, listB, listC))
True
>>> n = 4
>>> any(n in x for x in (listA, listB, listC))
True
>>> n = 0
>>> any(n in x for x in (listA, listB, listC))
False
>>>

答案 1 :(得分:3)

正如我认为涉及集合的Python问题是强制性的,这里是基于itertools的答案:

 if partialAnswer in itertools.chain(primaryTrees, secondaryTrees, tertiaryTrees)

请注意,如果树通过比线性搜索更快的速度更改为实现in的其他集合,则此答案将变得效率低(与原始代码相比)。

答案 2 :(得分:1)

使用any()

trees = (primaryTrees, secondaryTrees, tertiaryTrees)
if any(partialAnswer in tree for tree in trees):
    ...

从本质上讲,any()相当于对可迭代的布尔值进行的一系列or操作,而其表兄all()相当于一系列and操作。

答案 3 :(得分:1)

partialAnswer至少在其中一个列表中,如果&只有当它在列表的串联中时,所以:

if partialAnswer in primaryTrees + secondaryTrees + tertiaryTrees:

答案 4 :(得分:1)

您可以使用sum。效率会降低,但看起来会更简单。

if partialAnswer in sum(primaryTrees, secondaryTrees, tertiaryTrees, []):