Python 查看列表是否只有某些值

Python 查看列表是否只有某些值,python,Python,给出一个列表: x = [1,2,1,1,1,2,1] 是否有一行代码来查看列表是否只包含指定的值而不包含其他值?例如: x([1,2]) = True x([1,]) = False x([1,2,3]) = False 例如,您可以检查setx是否希望查看列表中的元素是否来自某个集合。如果是这种情况,您可以转换为集合并使用issubset: 其他问题中建议了set的替代方案,在某些情况下,如果set失败,则会更快: all(y in (1, 2) for y in x) 它有时会更快,

给出一个列表:

x = [1,2,1,1,1,2,1]
是否有一行代码来查看列表是否只包含指定的值而不包含其他值?例如:

x([1,2]) = True
x([1,]) = False
x([1,2,3]) = False

例如,您可以检查setx是否希望查看列表中的元素是否来自某个集合。如果是这种情况,您可以转换为集合并使用issubset:

其他问题中建议了set的替代方案,在某些情况下,如果set失败,则会更快:

all(y in (1, 2) for y in x)
它有时会更快,因为所有的东西都失败得很快——一旦找到一个错误的东西,它就不会继续循环

至于速度,

$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=(1,2)' 'all(y in check for y in x)'
1000000 loops, best of 3: 1.03 usec per loop
$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=set((1,2))' 'all(y in check for y in x)'
1000000 loops, best of 3: 1.01 usec per loop
噪声中的时间差。如果两个答案的原始版本中存在的致命错误已修复,则建议根据其他答案使用集合的速度确实更快:

$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=set((1,2))' 'set(x)<=check'
1000000 loops, best of 3: 0.425 usec per loop

致命的错误是,对于现在已在编辑中更正的两个答案,原始版本使用了==而不是[1,2,3]为什么为True?@AshwiniChaudhary-因为[1,2,1,1,1,2,1]中的所有项都可以在[1,2,3]中找到。设置[1,2,3]。然后应该首选issupersetx。但是设置[1]
$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=set((1,2))' 'set(x)<=check'
1000000 loops, best of 3: 0.425 usec per loop