为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2022-10-25 15:14:37
我想以相等的间隔将较短的列表插入较长的列表中。例如,给定# existing listmain_list = ['lst1','lst2','lst3','lst4','lst5','lst6'] # aux list to be inserted to main listaux_list = ['ax1','ax2','ax3'] 我希望输出是# desired output listnew_list = ['lst1','lst2','ax1','lst3','lst4','ax2','lst5','lst6','ax3'] 我试过了new_list = [i[:2]+k for i,k in zip(main_list,aux_list)]但这并没有产生所需的输出。(为清晰而编辑)
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

尝试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), ())))



查看完整回答
反对 回复 2022-10-25
?
阿晨1998

TA贡献2037条经验 获得超6个赞

这可能更容易理解,并且可以根据不同的列表大小进行缩放:


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

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


# get subdivision sizes in main_list

m = 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)]


# flatten

z = [k for sec in z for k in sec]


z

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

(请注意,如果您的列表不是可分割的大小,这将给出意外的输出和/或中断)


查看完整回答
反对 回复 2022-10-25
?
撒科打诨

TA贡献1934条经验 获得超2个赞

以@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)], [])


查看完整回答
反对 回复 2022-10-25
  • 3 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信