Сопоставить элементы списка с их индексами в другом списке - PullRequest
0 голосов
/ 16 декабря 2018

Я сравниваю два списка в Python.

list1 - это расширенный набор list2.

Для элементов list1 я хочу, чтобы их индекс составлял list2 (если имеется).

Вот два примера.

list1 = ['a','b','c','d']
list2 = ['a','b']

Решение должно дать [0, 1].

list1 = ['a','b','c','d']
list2 = ['b','a']

Решение должно дать [1, 0].

Я попытался следующий код, но это работает только для первого примера.

list1 = ['a','b','c','d']
list2 = ['a','b']

pairwise = zip(list1,list2)
matched_index = [idx for idx, pair in enumerate(pairwise) if pair[0] == pair[1]]

Это работает.Однако для второго набора данных выборки я получаю неправильный вывод [] вместо ожидаемого вывода [1, 0].

list1 = ['a','b','c','d']
list2 = ['b','a']

pairwise = zip (list1,list2)
matched_index = [idx for idx, pair in enumerate(pairwise) if pair[0] == pair[1]]
print(matched_index) # prints []

Пожалуйста, предложите путь вперед.

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Поскольку list2 является подмножеством list1, вы можете создать словарное отображение, а затем использовать dict.__getitem__ для значений list2 для извлечения индексов:

list1 = ['a','b','c','d']
list2 = ['a','b']
list3 = ['b','a']

d = {v: k for k, v in enumerate(list1)}

res1 = list(map(d.__getitem__, list2))  # [0, 1]
res2 = list(map(d.__getitem__, list3))  # [1, 0]
0 голосов
/ 16 декабря 2018

При условии, что в каждом списке есть уникальные элементы и len(list1) >= len(list2)

>>> list1 = ['a','b','c','d']                                                                                            
>>> list2 = ['d','a', f]
>>> print([list2.index(x) for x in list1 if x in list2])
0 голосов
/ 16 декабря 2018

Я предлагаю использовать словарь, сопоставляющий элементы list2 с их индексами - при условии, что list2 имеет уникальные элементы.

>>> list1 = ['a','b','c','d']                                                                                            
>>> list2 = ['b','a']
>>> idx = {x:i for i,x in enumerate(list2)}                                                                            
>>> idx                                                                                                                
{'a': 1, 'b': 0}

Теперь вы можете выдавать

>>> [idx[x] for x in list1 if x in idx]                                                                                
[1, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...