2016-03-21 77 views
9

我有一個名爲names的字符串列表,我需要使用pattern列表中的每個元素搜索names列表中的每個元素。發現了一些指南,可以遍歷一個單獨的字符串,但不是字符串匹配另一個字符串元素列表的字符串元素搜索列表

a = [x for x in names if 'st' in x] 

列表預先感謝您!

names = ['chris', 'christopher', 'bob', 'bobby', 'kristina'] 
pattern = ['st', 'bb'] 

所需的輸出:

a = ['christopher', 'bobby', 'kristina] 

回答

8

使用any()功能與generator expression

a = [x for x in names if any(pat in x for pat in pattern)] 

any()是短路功能,所以第一次遇到一個圖案匹配,它返回True。由於我使用的是生成器表達式而不是列表理解,所以即使檢查匹配的第一個模式後也沒有模式。這意味着這只是最快的方式。

+0

工作就像一個冠軍,並感謝您的解釋! – Christopher

2

你可以做這樣的事情:

[name for name in names if any([p in name for p in pattern])] 

代碼是自我解釋,只是大聲讀出來;我們正在創建一個包含其中一種模式的所有名稱的列表。

使用兩個循環:

for name in names: 
    for pattern in patterns: 
     if pattern in name: 
      # append to result 
+0

謝謝你的朗讀建議,它有助於:) – Christopher

相關問題