簡體   English   中英

如何從 python 中的整數列表中 append 項目列表 n 次?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM