Выведите индексы элементов в одном списке в соответствии со значениями другого списка в отдельных строках и выведите -1 для отсутствующих элементов в python - PullRequest
0 голосов
/ 09 мая 2020
A = [['a'],['a'],['b'],['c'],['b'],['a']]

B = [['k'],['k'],['a'],['b'],['k']]

У меня есть два списка, A и BI должны распечатать порядковый номер этих элементов (номер индекса + 1), разделенный пробелом списка A, элементы которого также существуют в списке B. Для каждого элемента списка B, i хочу напечатать индексы значений в списке A последовательно в одной строке. Если в списке A есть какой-либо элемент списка B, который отсутствует в списке A, я хочу вывести -1 для этого элемента. Как я могу это исправить?

мой код:

dict_B = dict([(b[0],[]) for b in B])

for i,a in enumerate(A):
    if a[0] in dict_B:
        dict_B[a[0]].append(i+1)

for key in dict_B:
    if dict_B[key] == []:
        c = 0
        for i,x in enumerate(B):
            if x == list(key):
                c += 1
        for x in range(c):
            if x == c-1:
                print(-1,end=" ")
            else:
                print(-1)
    else:
        for elem in dict_B[key]:
            print(elem,end=' ')
    print()

Вывод моего кода:

-1
-1
-1 
1 2 6 
3 5 

Ожидаемый результат:

-1
-1
1 2 6
3 5
-1

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вы слишком усложняете проблему, я не уверен, почему вам нужно использовать dict.

for item_b in B:
    found = []
    for i, item_a in enumerate(A):
        if item_a == item_b:
            found.append(str(i + 1))
    print(" ".join(found) or -1)

Вывод:

-1
-1
1 2 6
3 5
-1
1 голос
/ 09 мая 2020

Здесь можно использовать collections.defaultdict.

from collections import defaultdict
idx_dict=defaultdict(list)

for idx,[val] in enumerate(A,1):
    idx_dict[val].append(idx)

for [key] in B:
    if key in idx_dict:
        print(' '.join(map(str,idx_dict[key])))
    else:
        print(-1)

Вывод:

-1
-1
1 2 6
3 5
-1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...