在 python 中的列表之间映射的最快方法是什么
What is the quickest way to map between lists in python
我有一对 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 中执行此操作的最快方法是什么?
有没有比使用列表更快的方法?
编辑:
为了澄清问题,举个例子:
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]]
客观地说,这个问题是针对数据库应用程序的,其中 "lists" 包含自动生成的键值
我想你想要的是 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" 列表构成了这本词典的键。而 "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.OrderedDict or 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
我有一对 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 中执行此操作的最快方法是什么?
有没有比使用列表更快的方法?
编辑:
为了澄清问题,举个例子:
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]]
客观地说,这个问题是针对数据库应用程序的,其中 "lists" 包含自动生成的键值
我想你想要的是 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" 列表构成了这本词典的键。而 "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.OrderedDict or 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