匹配长度不相等的字符列表



我想匹配两个列表,其中一个列表较小,而另一个列表较大。如果两个列表之间发生匹配,则将匹配元素放在同一索引处的新列表中,而不是将其放在另一个索引中。您可以从下面给出的代码中理解我的问题:

list1=['AF','KN','JN','NJ']
list2=['KNJ','NJK','JNJ','INS','AFG']
matchlist = []
smaller_list_len = min(len(list1),len(list2))

for ind in range(smaller_list_len):
elem2 = list1[ind]
elem1 = list2[ind][0:2] 
if elem1 in list2:
matchlist.append(list1[ind])

获得的输出

>>> matchlist
['KNJ', 'NJK', 'JNJ']

期望的输出

>>> matchlist
['AFG', 'KNJ', 'JNJ', 'NJK']

有没有办法获得所需的输出?

使用嵌套循环遍历 3 个字符列表。当该列表中的项包含 2 个字符列表中的当前项时,请追加它并断开内部循环:

list1=['AF','KN','JN','NJ']
list2=['KNJ','NJK','JNJ','INS','AFG']
matchlist = []
smaller_list_len = min(len(list1),len(list2))

for ind in range(smaller_list_len):
for item in list2:
if list1[ind] in item:
matchlist.append(item)
break

鉴于问题没有指定任何约束,以更pythonic的方式,使用列表推导

list1=['AF','KN','JN','NJ']
list2=['KNJ','NJK','JNJ','INS','AFG']
matchlist=[e2 for e1 in list1 for e2 in list2 if e2.startswith(e1)]

生产

['AFG', 'KNJ', 'JNJ', 'NJK']

最新更新