Python在列表中寻找匹配

时间:2017-01-31 08:24:28

标签: python list pattern-matching comparison

说出有一个名为PatternList = ['b', 0, 'e', 0]的列表。如何检查CompareList = ['r', 't', 'y', 'b', 'i', 'e', 'y', 'b', 't', 'e', 'r', 't', 'b', 'w', 't', 'e']中包含的模式PatternList中是否包含>>> import numpy as np >>> a = np.zeros((6*4+1,), dtype='i1')[1:] >>> a.dtype = 'f4' >>> a[:] = np.arange(6, dtype='f4') >>> i = np.nditer(a, [], [['readwrite', 'updateifcopy', 'aligned']]) >>> print(i.operands[0].flags) C_CONTIGUOUS : True F_CONTIGUOUS : True OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : True # <--- :-) ,以及多少次?

在这种情况下,结果将是2,因为CompareList = [&#39; r&#39;,&#39; t&#39;,&#39; y&#39;,&#39; b&#39; ,&#39;我&#39;,&#39;&#39; ,y,&#39; b&#39 ; ,t,&#39; ,&#39; r&#39;,&#39; t&#39;,&#39; b&#39; ,&#39; w&#39;,&#39;&#39;&#39; e&#39;]。

注意:PatternList可以被理解为&#39; b&#39;,任何字符,&#39; e&#39;,任何字符。

3 个答案:

答案 0 :(得分: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. 中的元素
  4. re.findall(res_of_step1, res_step_2)

答案 1 :(得分: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

答案 2 :(得分:-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
>>>