在python中列表之间映射的最快方法是什么?

时间:2018-05-07 10:04:48

标签: python map-function

我有4对a和b的对,其中包含list_1a = [1,2,3,...]list_1b = [8,11,15,...]等整数值。我们的想法是,list_1a中的整数值现在由list_1b中的整数值表示,list_2alist_2b中的整数值等。

现在我有一个包含4列final_list的列表,其中包含与a列表对应的整数值。我想将final_list中的值映射到b列表中的值。在python中最快的方法是什么?

有没有比使用列表更快的方法?

修改

为了澄清这个问题,请采用以下示例:

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 :(得分:5)

我认为你想要的是一个dictionary,它将键与值相关联。除非我对你想在这里做什么感到困惑。

所以,如果我制作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)

请参阅: how to merge 2 list as a key value pair in python

了解其他一些方法。

结果:

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

现在你的" a"列表组成了这本词典的关键词......而#34; 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

这是你想要的吗?

编辑:我觉得我应该注意到,当我的字典按顺序打印时,字典实际上并没有像列表那样排序。如果这对您很重要,您可能需要查看collections.OrderedDictsorted

更新

对于您想要做的事情,可以考虑使用嵌套字典。您可以制作一个字典,其值为字典,同时请注意,当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