python如何求一个列表里所有数字的和_比较Python中的两个列表A,B,找到A中与B中相同数字对应的所有元素...

本文介绍了如何使用Python通过zip、sort和groupby函数,实现对列表A中与列表B中数字一一对应的元素查找。通过给定示例A=[5,7,9,12,8,16,25]和B=[2,1,3,2,3,1,4],展示了如何获取对应关系:[7,16]对应1,[5,12]对应2,[8,9]对应3,[25]对应4。
摘要由CSDN通过智能技术生成

我想比较两个Python列表,’A’和’B’,我可以找到A中所有与B中相同数字对应的元素.我想对B中的每个数字执行此操作.例如,如果

A = [5, 7, 9, 12, 8, 16, 25]

B = [2, 1, 3, 2, 3, 1, 4]

我想得到

[7,16] corresponding to the number 1 of listB

[5, 12] corresponding to the number 2 of listB

[9, 8] corresponding to the number 3 of listB

[25] corresponding to the number 4 of listB

A和B将始终具有相同的长度.

解决方法:

您可以使用zip创建元组,这些元组由两个列表中的一个元素组成,然后对它们进行排序,最后按B中的值对它们进行分组:

>>> from itertools import groupby

>>> A = [5, 7, 9, 12, 8, 16, 25]

>>> B = [2, 1, 3, 2, 3, 1, 4]

>>> for k, g in groupby(sorted(zip(B,A)), key=lambda x: x[0]):

... print('{} corresponds to {}'.format([x[1] for x in g], k))

...

[7, 16] corresponds to 1

[5, 12] corresponds to 2

[8, 9] corresponds to 3

[25] corresponds to 4

在上面的zip(B,A)中返回可迭代的元组,其中每个元组都有来自B和A的元素:

>>> list(zip(B,A))

[(2, 5), (1, 7), (3, 9), (2, 12), (3, 8), (1, 16), (4, 25)]

然后对上面的结果进行排序,使得来自B的具有相同值的所有元组彼此相邻:

>>> sorted(zip(B,A))

[(1, 7), (1, 16), (2, 5), (2, 12), (3, 8), (3, 9), (4, 25)]

排序结果传递给groupby,它根据key函数返回的值对元组进行分组,在本例中是元组中的第一项.结果是(key,group)元组的可迭代元素,其中group是元素的可迭代元素:

>>> [(k, list(g)) for k, g in groupby(sorted(zip(B,A)), key=lambda x: x[0])]

[(1, [(1, 7), (1, 16)]), (2, [(2, 5), (2, 12)]), (3, [(3, 8), (3, 9)]), (4, [(4, 25)])]

标签:python,list

来源: https://codeday.me/bug/20190713/1453207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值