使用itertools.groupby()对重复列表对象进行分组

时间:2019-02-14 16:50:15

标签: python-2.7

我有一个列表,我想在其中将重复的对象分组为新列表中的单个对象。基本上,将其转换为:

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']"]

显然,这不是我要获取的列表格式。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您不必要地两次应用了groupby,也没有理由使用str.join

您可以改用以下列表理解:

['%s*' % len(l) * (len(l) > 1) + k for k, g in groupby(s) for l in (list(g),)]