Python 3.x 长度不等的匹配字符表

Python 3.x 长度不等的匹配字符表,python-3.x,list,loops,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):

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

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])
获得的输出

所需输出


是否有办法获得所需的输出?

使用嵌套循环迭代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

假设问题没有指定任何约束条件,请使用列表理解,以更为通俗的方式:

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

长度较小的列表是否总是有2个字符串,长度较长的列表是否总是有3个字符串?列表1总是较小的列表吗?是的,它可以有两个字符串,第二个列表是三个字符串检查下面的我的答案WNJ首先匹配KNJ。。。你的问题不能解释为什么它应该跳过KNJ
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']