Поиск индекса записей в списках списков, с дублированием и подсписками - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь найти индекс элементов, которые содержат похожие записи в списках списков.Данные могут содержать дублированные записи, а также подсписки.Например:

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 голосов
/ 19 декабря 2018

Если вам нужно число, указанное в индексе 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]
0 голосов
/ 19 декабря 2018

Если вы удалите внутренние списки из каждого элемента в 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]
0 голосов
/ 19 декабря 2018

Попробуйте это:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...