如何检查多个字符是否在列表中?

问题描述:

我有一个组合列表(例如5位数字的PIN码),并且只想要其中有1,2和3的组合。看了看周围,但似乎没有找到任何出于某种原因。如何检查多个字符是否在列表中?

if 1 in combination and 2 in combination and 3 in combination: 

这似乎工作,但我相信有一种更有效的方式,因为我的相当丑陋。

如果combination是一组可以执行一个子集检查:

if {1, 2, 3} <= combination: 

否则,你可以这样做:

if all(x in combination for x in (1, 2, 3)): 
+0

在'all'调用中是否有理由使用'(1,2,3)'而不是'[1,2,3]'? – Gabriel

+0

不是。在这种情况下,“(1,2,3)”和“[1,2,3]”在功能上是等同的。有些人更喜欢'()'表示数字是只读的;其他人更喜欢'[]'的外观。 –

你可以把你mobination为字符串,并在set检查intersaction

>>> combination = '456' 
>>> needed = '123' 
>>> set(needed) & set(combination) 
set([]) 
>>> combination = '156' 
>>> set(needed) & set(combination) 
set(['1']) 

如果从intersection获得超值回报那么你需要的值是combination