2013-07-20 52 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

神聖的指數計算成本,蝙蝠俠!這將掃描整個列表中添加的每個唯一編號。 –