假设我有一个数组(不一定是正方形)
my_array = ['name_1', 3
'name_2', 2]
,我想得到一个length 3+2=5
的列表(或numpy数组等),其中前三个位置分配给'name_1'
,后两个位置分配给'name_2'
。因此输出将是
['name_1', 'name_1', 'name_1', 'name_2', 'name_2']
这是我到目前为止所做的;请问有更好的方法吗?
import numpy as np
my_array = np.array([['name_1', 3], ['name_2', 2]])
l = []
for i in range(my_array.shape[0]):
x = [my_array[i, 0].tolist()] * np.int(my_array[i, 1])
l.append(x)
flat_list = [item for sublist in l for item in sublist]
print(flat_list)
打印:
['name_1', 'name_1', 'name_1', 'name_2', 'name_2']
谢谢!
答案 0 :(得分:2)
您可以结合使用列表乘法和new Date(Long.MAX_VALUE/1_000)
Sat Jan 09 20:00:54 PST 294247
:
new Date(Long.MAX_VALUE/1_000_000)
Fri Apr 11 16:47:16 PDT 2262
答案 1 :(得分:1)
这是另一种方法,跳过itertools
,偏爱生成器:
def expanded(matrix):
stream = iter(matrix)
for element, count in zip(stream, stream):
for _ in range(count):
yield element
list(expanded(my_array))
答案 2 :(得分:1)
使用列表理解:
In [3]: my_array = ['name_1', 3, 'name_2', 2]
In [4]: out = [i for i, j in zip(my_array[::2], my_array[1::2]) for _ in range(j)]
In [5]: out
Out[5]: ['name_1', 'name_1', 'name_1', 'name_2', 'name_2']