如何转换列表,例如:
['2', '5', '2', '5', '5', '3']
类似于:
2^2 * 5^3 * 3
?
我的想法是,如果有多个相同的数字,将它们合并为5 ^ 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