python – 比较子列表并合并它们
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 比较子列表并合并它们,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2857字,纯文字阅读大概需要5分钟。
内容图文
![python – 比较子列表并合并它们](/upload/InfoBanner/zyjiaocheng/788/b2a519607b0e4d60b808d476d3e7cc57.jpg)
我有一个包含大量子列表的列表,这些子列表最初是数字对,所以它看起来像:
list = [[2, 3], [4, 5], [7, 8], [8, 9], [11, 12], [14, 15], [15, 16], [16, 17], [17, 18], [18, 19], [20, 21]]
我想要的是将子列表的最后一位数与下一个子列表中的第一位数进行比较,如果它们匹配,则将它们合并到一个子列表中.因此,两个匹配的子列表的输出将是这样的:
output = [[7, 8, 9]]
当然,如果有一行匹配的子列表,那么将它们全部合并到一个大的子列表中.
output = [[14, 15, 16, 17, 18, 19]]
我正在考虑使用itemgetter作为比较的一种键.所以可能是这样的:
prev_digit = itemgetter(-1)
next_digit = itemgetter(0)
但最初我意识到我不知道如何在Python中使用它,因为缺乏知识.我试着想到一个for循环,但它没有成功,因为我不知道如何实现这些“键”.
对于某种灵感,我使用了这个Python, comparison sublists and making a list,但即便如此,我仍然没有解决方案.
此外,由于我的列表可以变得有点大(从人的角度来看,就像千对或者东西)我对最有效的方法非常感兴趣.
是的,我是Python的新手,所以我非常感谢好的解释.当然我可以谷歌,所以你可以避免深入解释功能,但像一般逻辑会很好.
解决方法:
我想我写过一次这个.它可以在列表上单次传递完成.
alist = [[2, 3], [4, 5], [7, 8], [8, 9], [11, 12], [14, 15], [15, 16], [16, 17], [17, 18], [18, 19], [20, 21]]
l = [alist[0][:]]
for e in alist[1:]:
if l[-1][-1] == e[0]:
l[-1].append(e[1])
else:
l.append(e[:])
代码从第一对开始读取.循环其余部分.检查最后一个列表的最后一个元素是否与该对的第一个元素相同.如果这样追加第二个元素,则将该对添加到列表中.
这导致l:
[[2, 3], [4, 5], [7, 8, 9], [11, 12], [14, 15, 16, 17, 18, 19], [20, 21]]
如果您只想要我建议的最大子列表:
>>> l = [[2, 3], [4, 5], [7, 8, 9], [11, 12], [14, 15, 16, 17, 18, 19], [20, 21]]
>>> max(l, key=len)
[14, 15, 16, 17, 18, 19]
并评估:
>>> alist = [[2, 3], [4, 5], [7, 8], [8, 9], [11, 12], [14, 15], [15, 16], [16, 17], [17, 18], [18, 19], [20, 21]]
>>>
>>> l = [alist[0][:]]
>>> for e in alist[1:]:
... if l[-1][-1] == e[0]:
... l[-1].append(e[1])
... else:
... l.append(e[:])
...
>>> l
[[2, 3], [4, 5], [7, 8, 9], [11, 12], [14, 15, 16, 17, 18, 19], [20, 21]]
>>> alist
[[2, 3], [4, 5], [7, 8], [8, 9], [11, 12], [14, 15], [15, 16], [16, 17], [17, 18], [18, 19], [20, 21]]
并进行比较. reduce解决方案需要6.4 usecs:
$python -mtimeit "list = [[2, 3], [4, 5], [7, 8], [8, 9], [11, 12], [14, 15], [15, 16], [16, 17], [17, 18], [18, 19], [20, 21]]" "reduce(lambda x,y: x[:-1] + [x[-1] + y[1:]] if x[-1][-1] == y[0] else x + [y], list[1:], [list[0]])"
100000 loops, best of 3: 6.4 usec per loop
for循环需要3.62 usecs:
$python -mtimeit "alist = [[2, 3], [4, 5], [7, 8], [8, 9], [11, 12], [14, 15], [15, 16], [16, 17], [17, 18], [18, 19], [20, 21]]" "l = [alist[0][:]]" "for e in alist[1:]:" " if l[-1][-1] == e[0]:" " l[-1].append(e[1])" " else:" " l.append(e[:])"
100000 loops, best of 3: 3.62 usec per loop
在Python 2.7.3上. for循环速度提高了56%.由于列表连接的成本取决于两个列表的长度之和,因此输入较大时差异可能更明显.而附加到列表稍微便宜一些.
内容总结
以上是互联网集市为您收集整理的python – 比较子列表并合并它们全部内容,希望文章能够帮你解决python – 比较子列表并合并它们所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。