Python 根据值列表重复每个元素
是否有一个Python内置程序根据另一个列表中的对应值重复列表中的每个元素?例如,由于列表Python 根据值列表重复每个元素,python,list,Python,List,是否有一个Python内置程序根据另一个列表中的对应值重复列表中的每个元素?例如,由于列表y中位置0处的值2,列表x中的A位置0重复了2次 >>> x = ['A', 'B', 'C'] >>> y = [2, 1, 3] >>> f(x, y) ['A', 'A', 'B', 'C', 'C', 'C'] 或者换句话说,实现此操作的最快方法是什么?试试这个 x = ['A', 'B', 'C'] y = [2, 1, 3] newarra
y
中位置0处的值2
,列表x
中的A
位置0重复了2次
>>> x = ['A', 'B', 'C']
>>> y = [2, 1, 3]
>>> f(x, y)
['A', 'A', 'B', 'C', 'C', 'C']
或者换句话说,实现此操作的最快方法是什么?试试这个
x = ['A', 'B', 'C']
y = [2, 1, 3]
newarray = []
for i in range(0,len(x)):
newarray.extend(x[i] * y[i])
print newarray
一种方法是
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']
还有
itertools。同样重复,但对于这种特殊情况,结果会更难看。只需使用简单的列表理解:
>>> 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']
>>>
我对a.J.(列表理解)、Randy C.(itertools)、mkHun和Paul Rooney(列表扩展)的答案执行了%timeit
,使用f(['a','B','C'],[20000,10,3])
。列表扩展速度最快,为155微秒,然后列表理解速度为301秒,最慢的是itertools,速度为1.3毫秒。编辑列表comp速度最慢,而不是itertools。列表扩展%timeit
,这是最快的列表(''.join([a*b代表a,b在zip(x,y)])
几乎和Paul Rooney的代码(155 us)一样快(162 us),但在10000次迭代后,速度并不比Paul Rooney的代码(155us)快
>>> 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']
>>>