Python中是否有任何智能打印方法?

时间:2013-08-22 06:51:30

标签: python list

我想要列表的智能打印。例如:

a=[2,2,2,1,1,1,1,1,1,1]

我希望打印结果如下:2*3, 1*7

不喜欢:2,2,2,1,1,1,1,1,1

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

如果订单无关紧要,您可以使用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'

答案 2 :(得分:1)

你想要简单的RLE(游程编码),你可以这样做

from itertools import groupby
return [(k, sum(1 for _ in g)) for k, g in groupby(a)]

你将得到一个元组列表,每个元组的第一项是原始数组中的数字,第二项是组长。