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), ())))
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']
(请注意,如果您的列表不是可分割的大小,这将给出意外的输出和/或中断)
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)], [])
添加回答
举报