如何将一个列表均匀地穿插到另一个列表中?

我想以相等的间隔将较短的列表插入较长的列表中。例如,给定


# existing list

main_list = ['lst1','lst2','lst3','lst4','lst5','lst6'] 


# aux list to be inserted to main list

aux_list = ['ax1','ax2','ax3'] 

我希望输出是


# desired output list

new_list = ['lst1','lst2','ax1','lst3','lst4','ax2','lst5','lst6','ax3'] 

我试过了


new_list = [i[:2]+k for i,k in zip(main_list,aux_list)]

但这并没有产生所需的输出。(为清晰而编辑)


SMILET
浏览 110回答 3
3回答

一只斗牛犬

尝试sum使用zip:print(sum(zip(main_list[::2], main_list[1::2], aux_list), ()))输出:('lst1', 'lst2', 'ax1', 'lst3', 'lst4', 'ax2', 'lst5', 'lst6', 'ax3')如果您希望结果是列表,请使用:print(list(sum(zip(main_list[::2], main_list[1::2], aux_list), ())))输出:['lst1', 'lst2', 'ax1', 'lst3', 'lst4', 'ax2', 'lst5', 'lst6', 'ax3']编辑:如果您希望它适用于所有不同的长度,请使用它:print(sum(zip(*[main_list[i::len(main_list) // len(aux_list)] for i in range(len(main_list) // len(aux_list))], aux_list), ()))输出:('lst1', 'lst2', 'ax1', 'lst3', 'lst4', 'ax2', 'lst5', 'lst6', 'ax3', 'lst7', 'lst8', 'ax4')同样,如果您希望结果是一个列表,请使用:print(list(sum(zip(*[main_list[i::len(main_list) // len(aux_list)] for i in range(len(main_list) // len(aux_list))], aux_list), ())))

阿晨1998

这可能更容易理解,并且可以根据不同的列表大小进行缩放:main_list = ['lst1','lst2','lst3','lst4','lst5','lst6'] aux_list = ['ax1','ax2','ax3'] # get subdivision sizes in main_listm = len(main_list) // len(aux_list)# create list of lists (in blocks)z = [main_list[m*i:m*(i+1)] + [aux] for i,aux in enumerate(aux_list)]# flattenz = [k for sec in z for k in sec]z# ['lst1', 'lst2', 'ax1', 'lst3', 'lst4', 'ax2', 'lst5', 'lst6', 'ax3'](请注意,如果您的列表不是可分割的大小,这将给出意外的输出和/或中断)

撒科打诨

以@U10-Forward 的回答为基础并对其进行概括:skip = len(main_list) // len(aux_list)main_sub_lists = [main_list[i:i+skip] for i in range(0, len(main_list), skip)]desired = sum([a_l + [b] for a_l, b in zip(main_sub_lists, aux_list)], [])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python