根据值列表重复每个元素

时间:2016-08-04 04:52:24

标签: python list

是否有内置的Python根据另一个列表中的相应值重复列表的每个元素?例如,列表A中的x位置0会重复2次,因为列表2中位置0的值为y

>>> x = ['A', 'B', 'C']
>>> y = [2, 1, 3]
>>> f(x, y)
['A', 'A', 'B', 'C', 'C', 'C']

或者换句话说,实现此操作的最快方法是什么?

4 个答案:

答案 0 :(得分:4)

只需使用简单的列表理解:

>>> x = ['A', 'B', 'C']
>>> y = [2, 1, 3]
>>> [x[i] for i in range(len(x)) for j in range(y[i])]
['A', 'A', 'B', 'C', 'C', 'C']
>>> 

答案 1 :(得分:3)

一种方式是以下

x = ['A', 'B', 'C']
y = [2, 1, 3]

s = []
for a, b in zip(x, y):
    s.extend([a] * b)

print(s)

结果

['A', 'A', 'B', 'C', 'C', 'C']

答案 2 :(得分:2)

from itertools import chain

list(chain(*[[a] * b for a, b in zip(x, y)]))
['A', 'A', 'B', 'C', 'C', 'C']

还有itertools.repeat,但这对于这个特殊情况最终会变得更加丑陋。

答案 3 :(得分:0)

试试这个

x = ['A', 'B', 'C']
y = [2, 1, 3]
newarray = []
for i in range(0,len(x)):
    newarray.extend(x[i] * y[i])

print newarray