我有两个字符串列表-x
和y
。 x
是来自不同网页的标题(以连字符分隔):
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
中的每个字符串。
我尝试使用以下内容:
if (x.find(y) != -1):
(仅返回最后一个值FINSA2
)name = [1 for i in x if subs in y]
-不起作用答案 0 :(得分:1)
列表理解中conditional expression中any
的组合应该可以解决问题:
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 y
是generator expression,这是一种可迭代的方法。如果迭代器中的任何值为true,则any
函数将进行迭代并生成True
。因此,如果y
中的任何字符串都在i
中,则any
返回True
。在这种情况下,-X1
将附加到i
。