搜索多个字符串

时间:2019-08-18 20:20:32

标签: python-3.x

我有两个字符串列表-xyx是来自不同网页的标题(以连字符分隔):

x = [  
     'ABC-12345-TTTT-MMMM-00000-FINSA1',
     'ABC-0000-KKKK-MMMM-00000-FINSA2' ,
     'ABC-3987-TKTKT-JJJJ-00000-FINSA1',
     'ABC-9990-TTTT-MMMM-00000-FINSA4' ,
     'ABC-5990-NNNN-MUUUT-00000-FINSA2'
     ]

y是运营商代码:

y = ['FINSA1','FINSA2']

我想将y(对于所有运营商代码)中的所有字符串与x(所有标头)中的所有字符串进行匹配。如果找到匹配项,则在每个匹配的'-X1'的末尾附加x

append部分很简单,但是我无法匹配y中的每个字符串。

我尝试使用以下内容:

  1. if (x.find(y) != -1):(仅返回最后一个值FINSA2
  2. name = [1 for i in x if subs in y]-不起作用

1 个答案:

答案 0 :(得分:1)

列表理解中conditional expressionany的组合应该可以解决问题:

In [1]: x = [   
   ...:      'ABC-12345-TTTT-MMMM-00000-FINSA1', 
   ...:      'ABC-0000-KKKK-MMMM-00000-FINSA2' , 
   ...:      'ABC-3987-TKTKT-JJJJ-00000-FINSA1', 
   ...:      'ABC-9990-TTTT-MMMM-00000-FINSA4' , 
   ...:      'ABC-5990-NNNN-MUUUT-00000-FINSA2' 
   ...:      ] 
   ...: 

In [2]: y = ['FINSA1','FINSA2']

In [3]: [i+'-X1' if any(t in i for t in y) else i for i in x]
Out[3]: 
['ABC-12345-TTTT-MMMM-00000-FINSA1-X1',
 'ABC-0000-KKKK-MMMM-00000-FINSA2-X1',
 'ABC-3987-TKTKT-JJJJ-00000-FINSA1-X1',
 'ABC-9990-TTTT-MMMM-00000-FINSA4',
 'ABC-5990-NNNN-MUUUT-00000-FINSA2-X1']

让我们分解一下。外部表达式是对x的列表理解,其中i代表x的各个元素。 t in i for t in ygenerator expression,这是一种可迭代的方法。如果迭代器中的任何值为true,则any函数将进行迭代并生成True。因此,如果y中的任何字符串都在i中,则any返回True。在这种情况下,-X1将附加到i