这是我的Python代码,它可以使用但是......我确信有一种方法可以简化这个长代码。
if partialAnswer in primaryTrees or partialAnswer in secondaryTrees or partialAnswer in tertiaryTrees:
对此有什么好的答案吗?
答案 0 :(得分:3)
您可以使用any
和generator 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, []):