假设我有一个包含大量不同项目的列表X,我正在测试它是否包含以下任何内容:(a, b, c)
。
如果a
比b
发生的频率高得多,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 ()
语句快得多,但它很乱,不可扩展。
答案 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)
这种形式似乎与你的更快的例子相当。