Python 将 Counter 对象转换为序数列表
Python convert Counter object into list of ordinals
我觉得这个应该有比较简单的解决方法。
我有一个 Counter 对象,我想从中创建一个由表示 Counter 对象中每个键的序数值的整数组成的列表。
说明我的意思:
假设这是我的计数器对象 -
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
来展平子列表,在我看来,这是一个更长但更多的解决方案 readable/descriptive:
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)
输出:
[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]
我觉得这个应该有比较简单的解决方法。
我有一个 Counter 对象,我想从中创建一个由表示 Counter 对象中每个键的序数值的整数组成的列表。
说明我的意思:
假设这是我的计数器对象 -
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
来展平子列表,在我看来,这是一个更长但更多的解决方案 readable/descriptive:
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)
输出:
[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]