Python:在列表中计算和重新排列具有相同值的数字

时间:2013-07-20 11:40:45

标签: python

如何转换列表,例如:

['2', '5', '2', '5', '5', '3']

类似于:

2^2 * 5^3 * 3

我的想法是,如果有多个相同的数字,将它们合并为5 ^ 3(三个五)。

3 个答案:

答案 0 :(得分: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()方法按计数按降序排序返回计数,但您也可以使用普通字典访问以任意顺序列出数字对。

答案 1 :(得分: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

它的工作原理是获取set(A)中每个唯一元素的计数(它给出所有数字)并将其放入元素本身的元组中。 [2,2] - > (设定){2}。您迭代并最终得到(2,[2,2] .count(2))

答案 2 :(得分: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