我有两个不同的列表,我需要找到列表的索引号有更多相似的模式,例如
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
答案 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]