从list1中的list2查找项,并在子列表中为list2中的每个项返回索引。如果未发现任何事件,则返回None。
list1 = ['fq','ab','opn','ef','cd','ef','opn','kl','fq','str','opn','ab','cd']
list2 = ['ab','cd','ef','ed','fq']
found_item_index = [code]
found_item_index = [[1,11], [4,12], [3,5], [None], [0]]
开始:
list1 = ['fq', 'ab', 'opn', 'ef', 'cd', 'ef', 'opn', 'kl', 'fq', 'str', 'opn', 'ab', 'cd']
list2 = ['ab', 'cd', 'ef', 'ed', 'fq']
def find_index(lst, item):
pos = [i for i, lst_item in enumerate(lst) if lst_item == item]
return pos or [None]
found_item_index = [find_index(list1, item) for item in list2]
print(found_item_index)
输出
[[1, 11], [4, 12], [3, 5], [None], [0, 8]]
如果list1
和list2
中的项目数较小,则可以应用蛮力解决方案。我们可以在list1
中搜索list2
的每个元素,然后将list1
的索引存储在一个空列表中。然后,如果有任何搜索结果,我们可以将此列表附加到found_item_index
。否则,我们将向found_item_index
添加一个仅包含[None]
元素的列表。
list1 = ['fq','ab','opn','ef','cd','ef','opn','kl','fq','str','opn','ab','cd']
list2 = ['ab','cd','ef','ed','fq']
found_item_index = []
for search_item in list2:
search_result = []
for i in range(len(list1)):
if search_item == list1[i]:
search_result.append(i)
if len(search_result)>0:
found_item_index.append(search_result)
else:
found_item_index.append([None])
print(found_item_index)
输出:
[[1, 11], [4, 12], [3, 5], [None], [0, 8]]
时间复杂度:O(n*n)
使用简单的迭代
例如:
list1 = ['fq','ab','opn','ef','cd','ef','opn','kl','fq','str','opn','ab','cd']
list2 = ['ab','cd','ef','ed','fq']
check_val = {} #--> {'fq': [0, 8], 'ab': [1, 11], 'opn': [2, 6, 10], 'ef': [3, 5], 'cd': [4, 12], 'kl': [7], 'str': [9]}
for idx, val in enumerate(list1):
check_val.setdefault(val, []).append(idx)
found_item_index = [check_val.get(i, [None]) for i in list2]
print(found_item_index)
输出:
[[1, 11], [4, 12], [3, 5], [None], [0, 8]]
使用NumPy作为:
import numpy as np
found_item_index = []
for i in range(len(list2)):
found_item_index.append(list(np.where(np.array(list1) == list2[i])[0])
if list(np.where(np.array(list1) == list2[i])[0]) else None)
found_item_index
这将为您提供所需的输出:
list1 = ['fq','ab','opn','ef','cd','ef','opn','kl','fq','str','opn','ab','cd']
list2 = ['ab','cd','ef','ed','fq']
output = [([i for i, x in enumerate(list1) if x == obj] if obj in list1 else [None]) for obj in list2]
print output