Какой самый быстрый способ отобразить между списками в Python - PullRequest
0 голосов
/ 07 мая 2018

У меня есть пары из 4 списков a и b с целочисленными значениями, такими как list_1a = [1,2,3,...] и list_1b = [8,11,15,...]. Идея состоит в том, что целочисленные значения в list_1a теперь представлены целочисленными значениями в list_1b и одинаковы для list_2a и list_2b и т. Д.

Теперь у меня есть список из 4 столбцов final_list, который содержит целочисленные значения, соответствующие спискам a. Я хочу сопоставить значения в final_list со значениями в списках b. Какой самый быстрый способ сделать это в Python?

Есть ли более быстрый способ, чем использование списков?

Edit:

Чтобы прояснить вопрос, возьмите следующий пример:

list_1a = [1,2,3]
list_1b = [8,11,15] 

list_2a = [5,6,7,8]
list_2b = [22,26,30,34]

list_3a = [11,12,13,14,18]
list_3b = [18,12,25,28,30]

list_4a = [51,61,72,82]
list_4b = [73,76,72,94]
  • Обратите внимание, что некоторые из этих списков могут содержать более миллиона записей (поэтому, возможно, проблема с памятью)
  • Списки не имеют одинаковую длину
  • Все целочисленные значения в этих списках уникальны для своих списков, т.е. list_1a + list_1b никогда не будет иметь повторяющегося целочисленного значения.

final_list должно выглядеть как final_list_b после отображения

final_list_a = [[1,6,11,51],[3,6,14,72]]
final_list_b = [[8,26,18,73],[15,26,28,72]]

Для упрощения, этот вопрос предназначен для приложения базы данных, в котором эти "списки" содержат автоматически сгенерированные значения ключей

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, что вам нужен словарь , который связывает ключи со значениями. Если я не запутался в том, что ты хочешь делать здесь.

Так что, если я сделаю 4 коротких списка примеров.

list_1a = [1,2,3,4]
list_1b = [8,11,15,18]
list_2a = [5,6,7,8]
list_2b = [22,26,30,34]

и превратить их в большой список всех значений "a" и всех значений "b".

a_list = list_1a + list_2a
b_list = list_1b + list_2b

Затем я могу использовать zip для объединения списков в словарь

my_dict = dict(zip(a_list, b_list))

print(my_dict)

См: как объединить список 2 в виде пары ключ-значение в python

для некоторых других способов сделать этот последний бит.

результат:

{1: 8, 2: 11, 3: 15, 4: 18, 5: 22, 6: 26, 7: 30, 8: 34}

Теперь ваш список "a" составляет ключи этого словаря ... в то время как список "b" составляет значения. Вы можете получить доступ к значениям с помощью клавиш. вот несколько примеров.

print(my_dict.keys())
print(my_dict.values())
print(my_dict[5])

дает мне:

[1, 2, 3, 4, 5, 6, 7, 8]
[8, 11, 15, 18, 22, 26, 30, 34]
22

Это то, что вы хотите?

РЕДАКТИРОВАТЬ: я чувствую, что должен отметить, что хотя мой словарь печатается по порядку, словари на самом деле не упорядочены как списки. Возможно, вы захотите просмотреть collection.OrderedDict или sorted , если это важно для вас.

Обновление:

Для того, что вы хотите сделать, возможно, рассмотрите вложенные словари. Вы можете создать словарь, значения которого являются словарями, также обратите внимание, что когда 1a и 1b не совпадают по длине, zip не имеет значения и просто исключает 60:

list_1a = [1,2,3,4]
list_1b = [8,11,15,18,60]
list_2a = [5,6,7,8]
list_2b = [22,26,30,34]

a_dict = dict(zip(list_1a, list_2a))
b_dict = dict(zip(list_1b, list_2b))

my_dict = {"a" : a_dict, "b" : b_dict}

print(my_dict)

Результат:

{'a': {1: 5, 2: 6, 3: 7, 4: 8}, 'b': {8: 22, 18: 34, 11: 26, 15: 30}}

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

print(my_dict["a"].keys())
print(my_dict["a"].values())
print(my_dict["a"][4])

Результат:

[1, 2, 3, 4]
[5, 6, 7, 8]
8
...