Найдите позиции из другого списка и примените эти позиции в другом списке

У меня есть 3 списка, например

list1 = [30,14,42,17,18]

list2 = [17,18,6,7,30,9,5,14,3,42,33]

list3 = [[-25,54,789,0.56],[-5,4,9,0.5],[-5,4,0.009,0.8],[-5,456,7,56],
[-5,4,9,0.6],[-2,4,9,-0.578],[-2,0.5,-7,-0.6],[-25,-50,78,0.1],[-4,-58,79,0.6],
[-2,5,7,4],[-5,54,43,0.45]]

Длина list2 и list3 одинакова.

Мой вопрос: берется каждое значение из list1, найдите его позицию в list2, извлеките значение из list3 из той же позиции. Эти списки создаются во время выполнения, т.е. идентификаторы и значения меняются во время выполнения.

Привет! Что вы пытались решить эту проблему?

Jondiedoop 26.10.2018 09:19
0
1
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать понимание словаря с enumerate, чтобы создать отображение числа в индекс для dict2, а затем использовать отображение для отображения чисел в list1 в соответствующий подсписок в list3 по отображенным индексам:

mapping = {n: i for i, n in enumerate(list2)}
print([list3[mapping[n]] for n in list1])

Это выводит:

[[-5, 4, 9, 0.6], [-25, -50, 78, 0.1], [-2, 5, 7, 4], [-25, 54, 789, 0.56], [-5, 4, 9, 0.5]]

Обратите внимание, что создание отображения сначала снижает среднюю временную сложность проблемы до На).

Ответ принят как подходящий

Используйте понимание списка,

In [67]: print [list3[j] for j in [list2.index(i) for i in list1]]
Out[67]: 
[[-5, 4, 9, 0.6],
 [-25, -50, 78, 0.1],
 [-2, 5, 7, 4],
 [-25, 54, 789, 0.56],
 [-5, 4, 9, 0.5]]

Или

In [69]: print [list3[list2.index(i)] for i in list1]
Out[69]: 
[[-5, 4, 9, 0.6],
 [-25, -50, 78, 0.1],
 [-2, 5, 7, 4],
 [-25, 54, 789, 0.56],
 [-5, 4, 9, 0.5]]
[list3[list2.index(i)] for i in list1] по-прежнему имеет среднюю временную сложность О (п ^ 2), потому что для каждой итерации по list1 требуется На), чтобы найти i в list2 с использованием метода list.index.
blhsing 26.10.2018 09:36

Другие вопросы по теме