我有一个列表,我想在其中将重复的对象分组为新列表中的单个对象。基本上,将其转换为:
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']"]
显然,这不是我要获取的列表格式。有人可以帮我吗?
答案 0 :(得分:1)
您不必要地两次应用了groupby
,也没有理由使用str.join
。
您可以改用以下列表理解:
['%s*' % len(l) * (len(l) > 1) + k for k, g in groupby(s) for l in (list(g),)]