如何轉換列表,例如:的Python:計數和重新排列與相同的值號碼列表
['2', '5', '2', '5', '5', '3']
喜歡的東西:
2^2 * 5^3 * 3
?
我的想法是,如果有多個相同的數字,將它們合併爲5^3(三五)的東西。
如何轉換列表,例如:的Python:計數和重新排列與相同的值號碼列表
['2', '5', '2', '5', '5', '3']
喜歡的東西:
2^2 * 5^3 * 3
?
我的想法是,如果有多個相同的數字,將它們合併爲5^3(三五)的東西。
您可以使用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()
方法返回計數的計數降序排序的順序,但也可以使用普通的字典訪問以任意順序列出數量 - 計數對。
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
我明白了,我正在輸入代碼,並在提交後,我看到你已經發布了一個簡短的答案,涵蓋了'計數器'的用法。我沒有刪除我的答案,因爲我覆蓋了字符串輸出部分。 – tamasgal
>>> 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))
請解釋它爲什麼這樣工作.. –
@YotamOmer它通過獲取'set(A)'中的每個唯一元素的* count *(它給出所有數字)並將其與元素本身放入一個元組中。 '[2,2]' - >(set)'{2}'。你迭代的結果是'(2,[2,2] .count(2))''。 – HennyH
神聖的指數計算成本,蝙蝠俠!這將掃描整個列表中添加的每個唯一編號。 –
+1。你打我幾秒鐘:) –
是的你是對的;我把'*'誤認爲'+'。 +1無論如何.. – arshajii