2011-06-27 97 views
0

我有兩個列表不是完全匹配,但沒有內容幾乎匹配,我想比較它們並找出匹配和不匹配的列表:搜索列表,並與另一個不精確的列表進行比較

name = ['group', 'sound', 'bark', 'dentla', 'test'] 

compare = ['notification[bark]', 'notification[dentla]', 
      'notification[group]', 'notification[fusion]'] 

Name Compare 
Group YES 
Sound NO 
Bark YES 
Dentla YES 
test NO 
+1

您將需要定義你認爲「匹配」。 – interjay

+0

比較內容真的是字符串嗎?或比較是列表的列表? – pajton

+0

不是沒有作業正在閱讀一大堆每天都會收到的電子郵件,並且想知道我沒有收到哪些電子郵件。 – namit

回答

2

您可以用於撥打對比清單可用內涵;你可以檢查名稱項與item in clean_compare

>>> clean_compare = [i[13:-1] for i in compare] 
>>> clean_compare 
['bark', 'dentla', 'group', 'fusion'] 
>>> name 
['group', 'sound', 'bark', 'dentla', 'test'] 
>>> {i:i in clean_compare for i in name} #for Python 2.7+ 
{'sound': False, 'dentla': True, 'bark': True, 'test': False, 'group': True} 

如果你想打印:

>>> d 
{'sound': False, 'dentla': True, 'bark': True, 'test': False, 'group': True} 
>>> for i,j in d.items(): 
...  print(i,j) 
... 
sound False 
dentla True 
bark True 
test False 
group True 

編輯:

或者,如果你只想打印它們,你可以做到這一點容易與一個for循環:

>>> name 
['group', 'sound', 'bark', 'dentla', 'test'] 
>>> clean_compare 
['bark', 'dentla', 'group', 'fusion'] 
>>> for i in name: 
...  print(i, i in clean_compare) 
... 
group True 
sound False 
bark True 
dentla True 
test False 
2
for n in name: 
    match = any(('[%s]'%n) in e for e in compare) 
    print "%10s %s" % (n, "YES" if match else "NO") 
+0

偉大的這是完美的是尋找什麼。 – namit

0

爲您給出的數據,我會做這樣的:

set([el[el.find('[')+1:-1] for el in compare]).intersection(name) 

輸出是:

set(['bark', 'dentla', 'group']) 
相關問題