我正在尝试在列表列表中查找包含相似条目的元素的索引。 数据可能包含重复的条目以及子列表。 例如:
list_A = [['A',[1],'a',],['B',[2],'b'],['C',[3],'c'],['D',[4],'d'],['E',[5],'e'],['A',[1],'a',]]
list_B = [['A','a'],['E','e']]
所需的输出应为:
[0, 4, 5]
答案 0 :(得分:1)
尝试一下:
import itertools
list_A = [['A',[1],'a',],['B',[2],'b'],['C',[3],'c'],['D',[4],'d'],['E',[5],'e'],['A',[1],'a',]]
list_B = [['A','a'],['E','e']]
desired_output = []
for i,j in itertools.product(enumerate(list_A),list_B):
if all(k in i[1] for k in j):
desired_output.append(i[0])
输出:
[0, 4, 5]
答案 1 :(得分:1)
如果需要索引1所示的数字,可以使用:
res = []
for lb in list_B:
for la in list_A:
if all([x in la for x in lb]):
res.append(la[1][0])
print sorted(res)
# OUTPUT: [1, 1, 5]
如果要在list_A
中建立索引,则应使用:
res = []
for lb in list_B:
for n, la in enumerate(list_A):
if all([x in la for x in lb]):
res.append(n)
print sorted(res)
# OUTPUT: [0, 4, 5]
答案 2 :(得分:0)
如果从list_A中的每个元素中消除了内部列表,则可以直接将这些元素与list_B进行比较:
list_A = [['A',[1],'a'], ['B',[2],'b'], ['C',[3],'c'], ['D',[4],'d'],
['E',[5],'e'], ['F',[6],'f']]
list_B = [['A','a'],['D','d'],['E','e']]
new_A = ([a, b] for a, _, b in list_A)
common = [i for i, x in enumerate(new_A) if x in list_B]
如果您确定list_B的每个元素都是唯一的,那么以下内容也可以工作:
new_A = [[a, b] for a, _, b in list_A]
common = [new_A.index(x) for x in list_B]