2013-07-20 27 views

回答

6

您可以使用collections.Counter object

>>> from collections import Counter 
>>> counts = Counter(['2', '5', '2', '5', '5', '3']) 
>>> counts 
Counter({'5': 3, '2': 2, '3': 1}) 
>>> ' * '.join(['{}^{}'.format(k, v) for k, v in counts.most_common()]) 
'5^3 * 2^2 * 3^1' 

,或者稍微复杂砸1

>>> ' * '.join(['{}^{}'.format(k, v) if v > 1 else k for k, v in counts.most_common()]) 
'5^3 * 2^2 * 3' 

Counter.most_common()方法返回计数的计数降序排序的顺序,但也可以使用普通的字典访问以任意顺序列出数量 - 计数对。

+0

+1。你打我几秒钟:) –

+0

是的你是对的;我把'*'误认为'+'。 +1无论如何.. – arshajii

0
from collections import Counter 

dataset = ['2', '5', '2', '5', '5', '3'] 

factorials = Counter(dataset) 

output_parts = [] 
for base, exponent in factorials.items(): 
    if exponent == 1: 
     output_parts.append(base) 
    else: 
     output_parts.append("%s^%s" % (base, exponent)) 

output = ' * '.join(output_parts) 
print(output) 

为您提供:

3 * 2^2 * 5^3 
+0

我明白了,我正在输入代码,并在提交后,我看到你已经发布了一个简短的答案,涵盖了'计数器'的用法。我没有删除我的答案,因为我覆盖了字符串输出部分。 – tamasgal

1
>>> A = ['2', '5', '2', '5', '5', '3'] 
>>> print(*[('%s^%i' % (i,A.count(i))) for i in set(A)] , sep = ' * ') 
5^3 * 2^2 * 3^1 

它的工作原理是让每一个独特的元素的计数集(A)(它给你所有的号码),并把它在一个元组元素本身。 [2,2] - >(set){2}。你迭代并结束(2,[2,2] .count(2))

+0

请解释它为什么这样工作.. –

+1

@YotamOmer它通过获取'set(A)'中的每个唯一元素的* count *(它给出所有数字)并将其与元素本身放入一个元组中。 '[2,2]' - >(set)'{2}'。你迭代的结果是'(2,[2,2] .count(2))''。 – HennyH

+0

神圣的指数计算成本,蝙蝠侠!这将扫描整个列表中添加的每个唯一编号。 –