python-2.7 - 使用 itertools.groupby() 对重复列表对象进行分组
问题描述
我有一个列表,我想将重复的对象分组到新列表中的单个对象中。基本上,转换这个:
s = ['0.352125', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0.241041', '0.313429', '1', '1']
对此:
s_new = ['0.352125', '4*1','8*0', '0.241041', '0.313429','2*1']
我尝试过itertools.groupby()
如下功能(python 2.7):
from itertools import groupby
s_g = [list(g) for k, g in groupby(s)]
s_new = [', '.join('{}*{}'.format(sum(1 for _ in g), k) for k, g in groupby(s_g))]
结果,我得到:
s_new = ["1*['0.352125'], 1*['1', '1', '1', '1'], 1*['0', '0', '0', '0', '0', '0', '0', '0'], 1*['0.241041'], 1*['0.313429'], 1*['1', '1']"]
显然,这不是我想要得到的列表格式。有人可以帮我吗?
解决方案
您不必要地申请groupby
了两次,也没有理由使用str.join
.
您可以改用以下列表推导:
['%s*' % len(l) * (len(l) > 1) + k for k, g in groupby(s) for l in (list(g),)]
推荐阅读
- python - 漂亮汤的谷歌新闻标题标签
- python - 使用作为引用第三列复制列值
- python - 将重叠图像拼接在一起后平滑重叠图像的最佳方法?
- haskell - 如何在haskell中更改构造函数的优先级
- python - Heroku 没有检测到语言
- database - 从包含一些丢失文件的数据目录中恢复 PostgreSQL 数据
- raspberry-pi - 使用单声道在 linux (Raspberry Pi) 上使用网络运行 dot net 程序集
- javascript - jQuery 在新的触发之前等待一个函数完成
- c++ - 交换链表的最后一个节点将进入无穷大——C++
- javascript - 在构造函数中同步加载图像