[英]How can I append a list of items n times from a list of integers in python?
我有一個項目列表要乘以第二個N
項目列表。 如何將 append 添加到新列表中,以便第一個列表的index[i]
附加相應的index[i]
次數?
當我運行下面的代碼時,它會附加元素但會乘以字符串長度,並且不會 append N
次。
play_type = ['draw','sweep','counter','option','bootleg']
play_blend = [30,25,20,15,10]
play_master = []
for i in range(len(play_blend)):
play_master.append(play_type[i]*play_blend[i])
只需將play_type[i]
這樣的列表:
play_type = ['draw','sweep','counter','option','bootleg']
play_blend = [30,25,20,15,10]
play_master = []
for i in range(len(play_blend)):
play_master.append([play_type[i]]*play_blend[i])
print(play_master)
Output:
[['draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw',
'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw',
'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw', 'draw',
'draw', 'draw', 'draw'], ['sweep', 'sweep', 'sweep', 'sweep', 'sweep',
'sweep', 'sweep', 'sweep', 'sweep', 'sweep', 'sweep', 'sweep', 'sweep',
'sweep', 'sweep', 'sweep', 'sweep', 'sweep', 'sweep', 'sweep', 'sweep',
'sweep', 'sweep', 'sweep', 'sweep'], ['counter', 'counter', 'counter',
'counter', 'counter', 'counter', 'counter', 'counter', 'counter', 'counter',
'counter', 'counter', 'counter', 'counter', 'counter', 'counter',
'counter', 'counter', 'counter', 'counter'], ['option', 'option', 'option',
'option', 'option', 'option', 'option', 'option', 'option', 'option',
'option', 'option', 'option', 'option', 'option'], ['bootleg', 'bootleg',
'bootleg', 'bootleg', 'bootleg', 'bootleg', 'bootleg', 'bootleg', 'bootleg',
'bootleg']]
如果這不是預期的 output 請澄清。
一個 itertools 版本:
from itertools import chain, repeat
play_master = [*chain(*map(repeat, play_type, play_blend))]
如果您想擁有所有項目的一個平面列表,您只需要第二個循環。 append
將始終 append 只是一個項目,無論是 int 還是列表。 使用zip
function 而不是迭代索引通常也更“干凈” :
play_type = ['draw','sweep','counter','option','bootleg']
play_blend = [30,25,20,15,10]
play_master = []
for typ, blend in zip(play_type, play_blend):
for _ in range(blend):
play_master.append(typ)
或者,作為列表理解:
play_master = [typ for typ, blend in zip(play_type, play_blend) for _ in range(blend)]
但是,您可以使用extend
方法“保存”一個循環:
for typ, blend in zip(play_type, play_blend):
play_master.extend([typ]*blend)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.