在具有重复项和子列表的列表列表中查找条目的索引

时间:2018-12-19 10:36:23

标签: python indexing

我正在尝试在列表列表中查找包含相似条目的元素的索引。 数据可能包含重复的条目以及子列表。 例如:

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]

3 个答案:

答案 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]