我想要一个智能打印列表。例如:
a=[2,2,2,1,1,1,1,1,1,1]
我想要这样的打印结果:2*3, 1*7
不喜欢:2,2,2,1,1,1,1,1,1
>>> a = [2,2,2,1,1,1,1,1,1,1]
>>> from itertools import groupby
>>> ["{}*{}".format(k, sum(1 for x in g)) for k, g in groupby(a)]
['2*3', '1*7']
或者为了代码重用:
>>> def rle(seq):
... return ((k, sum(1 for x in g)) for k, g in groupby(seq))
...
>>> ["{}*{}".format(*x) for x in rle(a)]
['2*3', '1*7']
collections.Counter
如果订单无关紧要,您可以使用:
>>> from collections import Counter
>>> a = [2,2,2,1,1,1,1,1,1,1]
>>> ",".join(("%s*%s" % (item, count) for item, count in Counter(a).iteritems()))
'1*7,2*3'
你想要简单的 RLE(运行长度编码),你可以这样做
from itertools import groupby
return [(k, sum(1 for _ in g)) for k, g in groupby(a)]
您将获得一个元组列表,每个元组的第一项是原始数组中的数字,第二项是组长度。