python列表map函数_关于map函数:在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]]

为了正确看待问题,这个问题适用于数据库应用程序,其中这些"列表"包含自动生成的键值

你都尝试了些什么?

您能否添加一些代码片段,了解您要查找的最终列表?

我可能会使用zip和dict。 如果您需要更具体的建议,您应该发布一个可重复性最小的示例,并附上一些简短的样本列表,这样我们就可以更好地了解您实际在做什么。

我想你想要的是一个字典,它将键与值相关联。除非我对你想做什么感到困惑。

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

看到:

如何在python中将2个列表合并为键值对

对于其他一些方法来做这最后一点。

结果:

{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或排序,如果这对您很重要。

更新:

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

这接近我正在寻找的。然而,这种规模如何记忆明智?其中一些名单有1000万条...

我已经使用了大量数据的dicts,并且它们可以很好地扩展。如果我们正在谈论那种规模的东西,那么首先创建一个字典而不是合并列表可能是个好主意,如果这是可能的话。 dicts是唯一可以做你想做的迭代,当列表变大时列表非常低效。你不能真正使用集合,因为键不会与值对齐。

有关可迭代效率的更多详细信息,请参见此处。似乎dicts对速度有好处,就像套装一样..但内存非常难。我仍然没有为你找到合理的选择。

你能查看问题的编辑版本吗?因为我想保留每对列表的值,即list_1a和list_1b,list_2a和list_2b等,所以会有一个问题,因为它们对于它们的列表是唯一的

好的,我编写了一个嵌套dicts的例子。你不能制作一套dicts,因为它们是不可取的。如果需要,您还可以选择制作一个dicts列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值