根据另一列重复列中的值

时间:2019-02-01 00:05:11

标签: python arrays python-3.x numpy

假设我有一个数组(不一定是正方形)

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']

谢谢!

3 个答案:

答案 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']