如何转换列表,例如:的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