繁体   English   中英

Python 将计数器 object 转换为序数列表

[英]Python convert Counter object into list of ordinals

我认为这应该有一个相对简单的解决方案。

我有一个计数器 object,我想从中创建一个由整数组成的列表,这些整数表示计数器 object 中每个键的序数值。

我的意思的插图:

假设这是我的计数器 object -

Counter(elems)

Counter({'elem1': 13,
         'elem2': 13})

由此,我想生成以下类型的“序数”列表:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

我尝试了一些事情,例如:

ord_list = [i for i in range(1, v + 1) for k, v in Counter(elems).items()]

但我得到的最接近的是[1, 1, 2, 2, 3, 3, 4, 4..., 13, 13]而不是我正在寻找的。

我错过了什么明显的东西? 感谢大家。

您缺少第二个循环,它将每个范围中的每个单独的数字添加到外部列表中。 另外,请记住,不需要迭代items ,因为您不会在任何地方使用键,所以只需迭代values

d = {'elem1': 13,
     'elem2': 13}

print([num for v in d.values() for num in range(1, v + 1)])

或者您可以使用itertools.chain来展平子列表,在我看来,这是一个更长但更具可读性/描述性的解决方案:

from itertools import chain

d = {'elem1': 13,
     'elem2': 13}

print(list(chain.from_iterable(range(1, v + 1) for v in d.values()))) 

这是您需要的:

elems = {'elem1': 13, 'elem2': 13}
ord_list = [i for k, v in Counter(elems).items() for i in range(1, v + 1)]
print(ord_list)

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM