2013-08-25 59 views

回答

5

這應該工作:

# 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): 
14

使用所述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): 

來解決這一點。

+2

可能想'x和所有(...)'.... –

+0

@JonClements:是說這個。 :-) –

2

另一種方式做你想要什麼(all是做到這一點的最慣用的方式,因爲所有其他的答案注),萬一有用的,如果您需要檢查不止一次:

s = set(l) 
cond = (len(s) == 1) and (item in s) 

它每次您想檢查條件時都有助於避免O(n)遍歷。

1

使用過濾器和len很容易。

x = ['hello', 'hello', 'hello'] 
s = 'hello' 
print len(filter(lambda i:i==s, x))==len(x) 
1

妍能做到這一點使用set

set(x) == {'hello'} 
相關問題