python中的子串匹配/列表比较

时间:2016-10-02 05:36:21

标签: python string list python-2.7

我有两个不同的列表,我需要找到列表的索引号有更多相似的模式,例如

list_1=['abdsc 23h', 'nis 4hd qad', '234 apple 54f','abdsc 2300h']
list_2=['abdsc 23', 'abdsc 230']

要对列表进行比较,如果list_2的元素与list_1匹配,那么它应该返回list_1的索引,其中该元素存在  1.注意:对于list_2的{​​{1}}的第2个元素,它必须返回4,因为它与abdsc 230的第4个元素匹配得最高

这是我要解决的代码

list_1

4 个答案:

答案 0 :(得分:0)

你必须做这样的事情:

def compare_substrings_in_list(first_list, compared_list):
    for element in first_list:
        last_match = 0
        for idx, compared_list_element in enumerate(compared_list):
            if element in compared_list_element:
                last_match = idx + 1
        return last_match

在迭代"搜索"列表中的每个元素的位置。并尝试使用in operator在第二个列表的每个元素上找到匹配项。

答案 1 :(得分:0)

以下解决方案可能适合您。

>>> for i,val in enumerate(sorted(list_2, key= len, reverse = True)):
...     for j,val2 in enumerate(list_1):
...         if val in val2:
...             print j+1
...             exit()
... 
4

请注意,如果您有多个匹配项,此解决方案是不够的。但这完全取决于您的使用案例。

现在,这应该没问题。

答案 2 :(得分:0)

这解决了你的问题,

list_1=['abdsc 23h', 'nis 4hd qad', '234 apple 54f','abdsc 2300h']
list_2=['abdsc 23', 'abdsc 230']

for strings in list_2:
print "-list1val--",strings
for other in list_1:
    print '--list2val---',other
    occurence = other.find(strings);
    if occurence==0:
        ind = list_1.index(other)
        print "the index of ",strings,"in list_1 is ",ind
        break

答案 3 :(得分:0)

一种方法是创建一个函数来从list_1返回sub_string的位置。然后,使用list_2

map()的每个元素上调用该函数
list_1=['abdsc 23h', 'nis 4hd qad', '234 apple 54f','abdsc 2300h']
list_2=['abdsc 23', 'abdsc 230']

def get_position_from_list(item, l):
    for i, val in enumerate(l):
        if item in val:
           return i + 1
    else:
        return None

map(lambda x: get_position_from_list(x, list_1), list_2)
# returns: [1, 4]