如何在数组python中获取一个特定时间的数字

spa*_*row 14 python python-2.7

我有一个数组A = [1,2,3]和另一个数组B = [4,5,6].现在,我需要另一个数组C,以便C中的元素应该是B元素A的顺序出现的相同元素.就像, C = [4, 5, 5, 6, 6, 6]

Kev*_*vin 17

A = [1,2,3]
B = [4,5,6]
C = [b_item for a_item, b_item in zip(A,B) for _ in range(a_item)]
print C
Run Code Online (Sandbox Code Playgroud)

结果:

[4, 5, 5, 6, 6, 6]
Run Code Online (Sandbox Code Playgroud)

这是一行相当于:

C = []
for a_item, b_item in zip(A,B):
    for _ in range(a_item):
        C.append(b_item)
Run Code Online (Sandbox Code Playgroud)

......大致相当于

C = []
for i in range(min(len(A), len(B))):
    a_item = A[i]
    b_item = B[i]
    for _ in range(a_item):
        C.append(b_item)
Run Code Online (Sandbox Code Playgroud)

(注意:不要被下划线绊倒.它是一个普通的变量.当你实际上不需要引用变量的值时,通常会使用它,如本例所示)


Sam*_*lix 6

我将提供另一种方法,使用不同的想法(不要声称他应该使用它,但出于教学原因)

我发现能够在python中使用复制元素非常整洁

[0]*3 # it means we create 3 elements of zero: [0,0,0]
Run Code Online (Sandbox Code Playgroud)

如果我只是这样做:

[[x]*i for i,x in zip(A, B)] 
Run Code Online (Sandbox Code Playgroud)

我得到了一些元素:

[[4], [5, 5], [6, 6, 6]]
Run Code Online (Sandbox Code Playgroud)

然后,我们可以使用itertools.chain返回单个列表:

from itertools import chain
list(chain(*[[x]*i for i,x in zip(A, B)]))
[4, 5, 5, 6, 6, 6]
Run Code Online (Sandbox Code Playgroud)


jmu*_*gz3 5

这是使用numpy的另一种解决方案:

import numpy

a = numpy.array = [1,2,3]
b = numpy.array = [4,5,6]

c = numpy.repeat(b,a)
Run Code Online (Sandbox Code Playgroud)

结果:

array([4, 5, 5, 6, 6, 6])
Run Code Online (Sandbox Code Playgroud)

有关使用numpy.repeat的更多信息,请访问:http://docs.scipy.org/doc/numpy/reference/generated/numpy.repeat.html