2017-01-31 125 views
-2

假設有一個名爲PatternList = ['b', 0, 'e', 0]的列表。我如何檢查在另一個列表CompareList = ['r', 't', 'y', 'b', 'i', 'e', 'y', 'b', 't', 'e', 'r', 't', 'b', 'w', 't', 'e']中是否包含PatternList中包含的模式以及多少次?Python尋找匹配列表

在這種情況下,結果將是2,如CompareList = [ 'R', 'T', 'Y','B', 'I','e' 的 ',Y,' b',t,'e','r','t','b','w','t','e']。

注意:PatternList可以被讀爲'b',任何字符,'e',任何字符。

+0

林不知道有誰知道什麼youre要求,因爲你說你想看到如果模式在第二個列表中,但它看起來像你想要的,如果任何值出現在第二個列表 – WhatsThePoint

+0

0意味着任何字符?如果'PatternList = ['b','i','b','t']'? – dnit13

+0

模式和比較列表中的元素是否總是由單個字符組成?現在,你的示例代碼甚至不是有效的Python,所以很難猜測你實際在尋找什麼。 –

回答

-1

這是你在想什麼?您可以使用列表理解:

>>> x = [1,2,3] 
    >>> y = [0,2,5,7,4,3] 
    >>> [i for i in x if i in y] 
    [2, 3] 

編輯:

>>> len(set([i for i in x if i in y])) 
2 
>>> 
+0

@leaf我不好,我沒有仔細閱讀。 –

2

你可以做這樣的事情用正則表達式:

import re 

l = ["b", "0", "e", "0"] 
cl = ["r", "t", "y", "b", "i", "e", "y", "b", "t", "e", "r", "t", "b", "w", "t", "e"] 

print re.findall(''.join(l).replace('0','.'), ''.join(cl)) 
print len(re.findall(''.join(l).replace('0','.'), ''.join(cl))) 

輸出:

['biey', 'bter'] 
2 

理念:

  1. 加入的元素在l.替換0任何字符cl匹配。
  2. 加入cl中的元素。
  3. re.findall(res_of_step1, res_step_2)
+0

你打敗我發佈相同的解決方案 - :) – dnit13

+0

你的是略有不同,考慮0爲整數。你也可以做'''.join(map(str,a))。replace('0','。')' – MYGz

+0

@MYGz這看起來不錯,但是我得到這個錯誤:「AssertionError:對不起,但是這個版本僅支持100個命名組「。有沒有解決方法? –

1

這看起來很簡單,當你將它轉換爲正則表達式:

a=['b', 0, 'e', 0] 
a1 = ['.' if i==0 else i for i in a] 
>>> a1 
['b', '.', 'e', '.'] 
>>> a2 = ''.join(a1) 
compareList = ['r', 't', 'y', 'b', 'i', 'e', 'y', 'b', 't', 'e', 'r', 't', 'b', 'w', 't', 'e'] 
>>> compare_string=''.join(compareList) 
>>> len(re.findall(a2, compare_string)) 
2 
+0

順便改變你的列表'a'。第三個元素應該是'e'來獲得2個匹配。 – MYGz

+0

@MYGz從終端複製錯誤,Thnx - :) – dnit13