如何转换列表,例如:
['2', '5', '2', '5', '5', '3']
类似于:
2^2 * 5^3 * 3
?
我的想法是,如果有多个相同的数字,将它们合并为 5^3(三个五)。
如何转换列表,例如:
['2', '5', '2', '5', '5', '3']
类似于:
2^2 * 5^3 * 3
?
我的想法是,如果有多个相同的数字,将它们合并为 5^3(三个五)。
您可以使用一个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()
方法按计数按降序返回计数,但您也可以仅使用普通字典访问以任意顺序列出数字-计数对。
>>> 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))
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