如果一个元素存在于多个列表中,是否可以简化查找?

2024-09-30 16:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有人对此有好的答案吗?你知道吗


Tags: or方法答案代码inifsecondarytreespartialanswer
3条回答

使用^{}

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

本质上,any()等价于布尔可数的一系列or运算,而它的表亲all()等价于一系列^{}运算。你知道吗

可以使用^{}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
>>>

我觉得涉及集合的Python问题是必须的,下面是基于itertools的答案:

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

但是要注意,如果树通过执行比线性搜索更快的操作而更改为实现in的不同集合,那么这个答案将变得低效(与原始代码相比)。你知道吗

相关问题 更多 >