python如何比较两个列表中元素相同_python中比较两个列表并获得相同元素的算法...

本文介绍了如何使用Python的不同方法来找出两个列表之间的公共元素,并对比了各种方法的执行效率。其中包括使用集合运算、列表理解及内置函数any()等方式。通过计时测试显示,使用集合的交集方法效率最高。

使用chain()将这两个列表展平,然后使用set()和{}获取公共元素。在In [78]: from itertools import chain

In [79]: p

Out[79]:

[('link1/d/b/c', 'target1/d/b/c'),

('link2/a/g/c', 'target2/a/g/c'),

('linkn/b/b/f', 'targetn/b/b/f')]

In [80]: q

Out[80]:

[['target1/d/b/c', 'target1', 123, 334],

['targetn/b/b/f', 'targetn', 23, 64],

['targetx/f/f/f', 'targetx', 999, 888]]

In [81]: set(chain(*p)).intersection(set(chain(*q)))

Out[81]: set(['target1/d/b/c', 'targetn/b/b/f'])

或者使用列表理解和短路:

^{pr2}$

或使用any():In [87]: [j for i in p for j in i if any (j==z for y in q for z in y)]

Out[87]: ['target1/d/b/c', 'targetn/b/b/f']

计时:In [93]: %timeit set(chain(*p)).intersection(set(chain(*q)))

100000 loops, best of 3: 7.38 us per loop ## winner

In [94]: %timeit [j for i in p for j in i if j in (z for y in q for z in y)]

10000 loops, best of 3: 24.9 us per loop

In [95]: %timeit [j for i in p for j in i if any (j==z for y in q for z in y)]

10000 loops, best of 3: 27.4 us per loop

In [97]: %timeit [x for x in chain(*p) if x in chain(*q)]

10000 loops, best of 3: 12.6 us per loop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值