python – 按未排序列表中的出现顺序对列表项进行分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 按未排序列表中的出现顺序对列表项进行分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1192字,纯文字阅读大概需要2分钟。
内容图文
测试用例:
group_ordered([1,3,2,3,6,3,1]) = [1,1,3,3,3,2,6]
group_ordered([1,2,3,4,5,6,1]) = [1,1,2,3,4,5,6]
我已经有了一些代码,但它很丑陋并且在大型列表上也可能很慢,因为对于每个独特的项目我都在查看整个列表.我提出了这个算法,但我想知道是否有更快,更清洁或更pythonic的方式我可以做到这一点:
def make_order_list(list_in):
order_list = []
for item in list_in:
if item not in order_list:
order_list.append(item)
return order_list
def group_ordered(list_in):
if list_in is None:
return None
order_list = make_order_list(list_in)
current = 0
for item in order_list:
search = current + 1
while True:
try:
if list_in[search] != item:
search += 1
else:
current += 1
list_in[current], list_in[search] = list_in[search], list_in[current]
search += 1
except IndexError:
break
return list_in
解决方法:
使用collections.OrderedDict() instance进行分组:
from collections import OrderedDict
def group_ordered(list_in):
result = OrderedDict()
for value in list_in:
result.setdefault(value, []).append(value)
return [v for group in result.values() for v in group]
因为此专用字典对象跟踪键的插入顺序,所以输出按首次出现的组值排序.
演示:
>>> group_ordered([1,3,2,3,6,3,1])
[1, 1, 3, 3, 3, 2, 6]
>>> group_ordered([1,2,3,4,5,6,1])
[1, 1, 2, 3, 4, 5, 6]
内容总结
以上是互联网集市为您收集整理的python – 按未排序列表中的出现顺序对列表项进行分组全部内容,希望文章能够帮你解决python – 按未排序列表中的出现顺序对列表项进行分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。