給出一個列表:看看只列出有一定的價值
x = [1,2,1,1,1,2,1]
有一個班輪,看看名單僅包含指定的值,並沒有別的?例如:
x([1,2]) = True
x([1,]) = False
x([1,2,3]) = False
給出一個列表:看看只列出有一定的價值
x = [1,2,1,1,1,2,1]
有一個班輪,看看名單僅包含指定的值,並沒有別的?例如:
x([1,2]) = True
x([1,]) = False
x([1,2,3]) = False
您可以檢查,例如,set(x) <= set([1, 2])
。 (您可以在Python 2.7及更高版本中使用{1, 2}
作爲set([1, 2])
。)
'set([1,2,3])。issuperset(x)'應該是首選的。 –
然後'set([1])<= set([1,2])'如果'x = set([1])' – jamylak
看起來您想查看列表中的元素是否來自某個集合。如果是這樣的話,你可以轉換爲一組,並使用issubset
:
>>> x = set([1,2,1,1,1,2,1])
>>> x.issubset([1,2])
True
>>> x.issubset([1])
False
>>> x.issubset([1,2,3])
True
到set
一種替代的其他問題提出,這可能是在某些情況下,它無法更快:
all(y in (1, 2) for y in x)
它有時可能會更快,因爲all
「快速失敗」 - 只要找到一個爲false的項,它就會釋放(不會循環)。
至於速度,
$ 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
殺手錯誤是說原來的版本中,這兩個答案(現予以更正在編輯中),使用==
而不是<=
- 因此他們檢查了x
的項目與check
的項目完全相同,而不是根據需要來滿足您的規格,而是子集(需要您的示例之一True
爲x
和[1,2,3]
,並且這兩個原始版本在那裏都會失敗)。
爲什麼''[1,2,3]''是真的? –
@AshwiniChaudhary - 因爲'[1,2,1,1,1,2,1]'中的所有項都可以在'[1,2,3]'中找到。 – iCodez