我怎麼會覺得,如果我有一個給定的字符串,「你好」的列表:看看列表中的所有項目=某些字符串
x = ['hello', 'hello', 'hello']
# evaluates to True
x = ['hello', '1']
# evaluates to False
我怎麼會覺得,如果我有一個給定的字符串,「你好」的列表:看看列表中的所有項目=某些字符串
x = ['hello', 'hello', 'hello']
# evaluates to True
x = ['hello', '1']
# evaluates to False
這應該工作:
# First check to make sure 'x' isn't empty, then use the 'all' built-in
if x and all(y=='hello' for y in x):
關於all
內置的好的一點是,它停止在它發現的不符合條件的第一個項目上。這意味着它對於大型列表非常有效。
而且,如果列表中所有的項目都是字符串,那麼你可以使用一個字符串的方法lower
匹配之類的東西`「你好」,「你好」等
if x and all(y.lower()=='hello' for y in x):
使用所述all()
function測試如果條件成立True
所有元素:
all(el == 'hello' for el in x)
的all()
函數採用一個可迭代(東西產生的結果逐個),並且如果所有茨艾倫將只返回True
本身e元素是真實的。一旦發現任何錯誤,它將返回False
而不會看得更遠。
這裏的iterable是一個生成器表達式,它爲輸入序列中的每個元素執行相等性測試。如果遇到錯誤值,all()
提前停止迭代,如果包含的生成器表達式中的測試對於早期的任何元素爲False,則此測試非常有效。
注意,如果x
是空,然後all()
回報True
以及因爲它不會發現是一個空序列虛假的任何元素。您可以測試序列爲非空第一:
if x and all(el == 'hello' for el in x):
來解決這一點。
另一種方式做你想要什麼(all
是做到這一點的最慣用的方式,因爲所有其他的答案注),萬一有用的,如果您需要檢查不止一次:
s = set(l)
cond = (len(s) == 1) and (item in s)
它每次您想檢查條件時都有助於避免O(n)
遍歷。
使用過濾器和len很容易。
x = ['hello', 'hello', 'hello']
s = 'hello'
print len(filter(lambda i:i==s, x))==len(x)
妍能做到這一點使用set
:
set(x) == {'hello'}
可能想'x和所有(...)'.... –
@JonClements:是說這個。 :-) –