-2

如何转换列表,例如:

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

类似于:

2^2 * 5^3 * 3?

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

4

3 回答 3

6

您可以使用一个collections.Counter对象

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

于 2013-07-20T11:42:29.963 回答
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))

于 2013-07-20T11:48:07.020 回答
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
于 2013-07-20T11:46:37.877 回答