Индексирование списка списков с использованием списка одинаковых строк - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь создать список списков, заменяя данную строку на индексы строки из другого списка.

Я пробовал несколько циклов for, как показано ниже

l = ['FooA','FooB','FooC','FooD']
data = [['FooB','FooD'],['FooD','FooC']]
indices = []
for sublist in data:
    for x in sublist:
        indecies.append(l[list.index(x)])

Я надеюсь получить: indices = [[1,3],[3,2]] хотя типы данных элементов могут быть str при необходимости

самым близким, что я мог получить, чтобы получить что-то подобное, был список списков 2x2, заполненный двумя

Ответы [ 2 ]

1 голос
/ 02 июля 2019

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

from itertools import chain

d = {j:i for i,j in enumerate(chain.from_iterable(l))}
# {'FooA': 0, 'FooB': 1, 'FooC': 2, 'FooD': 3}
[[d[j] for j in i] for i in data]
# [[1, 3], [3, 2]]
0 голосов
/ 02 июля 2019

Чтобы соответствовать вашему коду, я бы просто изменил его на:

l = ['FooA','FooB','FooC','FooD']
data = [['FooB','FooD'],['FooD','FooC']]
indices = []

for sublist in data:
    temp = []
    for x in sublist:
        temp.append(l.index(x))
    indices.append(temp)

print(indices)
# [[1, 3], [3, 2]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...