长度不等的匹配字符列表

时间:2019-10-14 04:37:38

标签: python-3.x list loops

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

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

有没有办法获得想要的输出?

2 个答案:

答案 0 :(得分:1)

使用嵌套循环遍历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

答案 1 :(得分:0)

鉴于此问题,它没有使用列表理解以更Python化的方式指定任何约束条件:

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