簡體   English   中英

Python 在列表中查找匹配項

[英]Python look for matching in lists

假設有一個名為PatternList = ['b', 0, 'e', 0] 如何檢查是否在另一個列表中, CompareList = ['r', 't', 'y', 'b', 'i', 'e', 'y', 'b', 't', 'e', 'r', 't', 'b', 'w', 't', 'e'] ,包含在PatternList包含的模式,有多少次?

在這種情況下,結果將為 2,因為 CompareList = ['r', 't', 'y', 'b' , 'i', 'e'' , y, 'b' , t, 'e' , 'r'、't'、'b'、'w'、't'、'e']。

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

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

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)

當您將其轉換為正則表達式時,這看起來很簡單:

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

這是你想到的嗎? 您可以使用列表推導式:

    >>> 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
>>> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM