是否有内置的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']
或者换句话说,实现此操作的最快方法是什么?
答案 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