由rarity建立的python成员资格测试令

时间:2015-11-25 18:44:06

标签: python

假设我有一个包含大量不同项目的列表X,我正在测试它是否包含以下任何内容:(a, b, c)

如果ab发生的频率高得多,c反过来比any(True for v in X if v in (a, b, c)) 更常见,是否有办法强迫

a

首先检查if a in X or b in X or c in X: 以便它可以更快地返回?

any()

运行速度比if input_0 == "Start" or input_0 == "start": #These should evaluate the users input Waking_up () 语句快得多,但它很乱,不可扩展。

2 个答案:

答案 0 :(得分:2)

any(v in X for v in (a, b, c))

你以非常奇怪的方式整理了你的any。这种方式可以获得你想要的效果。

如果您希望以现有代码的方式进行检查(例如,如果X的早期元素更可能匹配),那么执行起来会更清晰

any(v in (a, b, c) for v in X)

如果代替(a, b, c)中的3个元素,你有很多,使用集合会更快:

not {a, b, c}.isdisjoint(X)

答案 1 :(得分:0)

你试过吗?

any(True for v in (a, b, c) if v in X)

这种形式似乎与你的更快的例子相当。