2017-02-04 66 views
0

我正在嘗試編寫一個函數,它接收一個字符串並檢查是否存在來自其中一個單獨列表的多個匹配項。Python 3:從另一個列表中檢查多個匹配的字符串

比方說,名單是:

fruits = ['Apple', 'Orange', 'Pineapple', 'Durian', 'Lychee'] 

和輸入字符串是:

"Apple, Orange" 

我想它返回如果從列表中兩個或多個項目在輸入字符串中。

所以:

"Durian, Apple, Orange" 

將返回。但是:

"Apple" 

會返回錯誤。

我只是不太清楚如何遍歷輸入字符串。將不勝感激任何幫助!

+1

你可以叫'.split()'輸入字符串,這將給你一個列表,然後按照步驟[這裏](http://stackoverflow.com/questions/6159313/can-python-測試最會員制-多值-IN-A-列表)。 – tyteen4a03

+0

'sum(1 for x in input_str.split(',')if x in fruits)> = 2' –

+0

'len([a for a in your_str.split(',')if a in fruits])> 1 ' – MYGz

回答

1

如果您還想重複計數(即輸入字符串'apple, apple'也會返回True),則以下行應該執行該作業。

sum(f in fruits for f in fruit_str.split(', ')) > 1 

如果你想檢查的獨特性,以及,你可以預處理輸入字符串,並檢查他們在水果列表呈現之前刪除重複。

sum(f in fruits for f in set(fruit_str.split(', '))) > 1 
+0

你也可以使用交點運算符'&',它應該比循環更有效率。 'len(set(fruit_str.split(','))&set(fruits))> = 2' –

+0

@HåkenLid:這是另一種方法,但我懷疑和交叉比循環更快。無論如何不需要循環? – Fallen

+0

在底層的C實現中,大概有一個循環。但是查找是恆定的時間,因爲set被實現爲哈希映射。 –

相關問題