2012-06-28 55 views
124

如果我有一個字符串數組,我可以檢查一個字符串是否在數組中而不執行for循環嗎?具體來說,我正在尋找一種方式來的if語句中做到這一點,所以是這樣的:檢查項目是否在數組/列表

if [check that item is in array]: 
+1

我認爲這個問題是已經回答[這裏](http://stackoverflow.com/questions/9542738/python-find-in-list) –

+0

或更好的這裏:http://stackoverflow.com/questions/12934190/is-there-a-short -contains-function-for-lists – torina

+0

可能的重複[檢查列表中是否存在值的最快方法](https://stackoverflow.com/questions/7571635/fastest-way-to-check-if-a-存在於列表中的值) –

回答

242

假設你的意思是「清單」裏你說「陣列」,你可以做

if item in my_list: 
    # whatever 
+45

......就是這樣嗎?我一直在谷歌搜索20分鐘.... – SomeKittens

+2

@SomeKittens:列表將在內部做自己的循環來測試成員資格。 – jdi

+1

@jdi,並且該循環運行速度比Python中顯式編碼的循環快得多,更不用說更易於閱讀了。 –

15

當你說「數組」時,我還會假定你的意思是「列表」。 Sven Marnach的解決方案很好。如果您要對列表進行重複檢查,則可能需要將其轉換爲集合或凍結集合,對於每個檢查來說可以更快。假設你的STR的列表被稱爲subjects

subject_set = frozenset(subjects) 
if query in subject_set: 
    # whatever 
-1

您也可以使用相同的語法的數組。例如,在Pandas系列內搜索:

ser = pd.Series(['some', 'strings', 'to', 'query']) 

if item in ser.values: 
    # do stuff 
0

使用lambda函數。

比方說,你有一個數組:

nums = [0,1,5] 

檢查是否5是nums

(len(filter (lambda x : x == 5, nums)) > 0) 

該解決方案更強勁。您現在可以檢查是否有任何數字滿足條件在您的數組nums中。

例如,檢查在nums是否存在任何數目大於或等於5:

(len(filter (lambda x : x >= 5, nums)) > 0) 
0

你必須使用.values爲陣列。 例如說你有數據幀具有列名即測試[「名稱」],你可以爲你不正常的名單做

if name in test['Name'].values : 
    print(name) 

必須使用.values

相關問題