基于list_1的元素值对list_2分组,生成等长组合列表
问题描述
给定两个列表:
list_1 = [3, 5, 7, 2] list_2 = [ '1-CHA', '2-NOF', '3-INC', '4-CHA', '5-NOF', '6-NOF', '7-INC', '8-INC', '9-INC', '10-INC', '11-CHA', '12-NOF', '13-CHA', '14-CHA', '15-INC', '16-INC', '17-INC' ]
需要生成final_list,要求:
final_list的长度与list_1一致list_1中的每个元素对应list_2里对应数量的元素,用|连接后作为final_list的元素,最终结果如下:
final_list = [ '1-CHA|2-NOF|3-INC', '4-CHA|5-NOF|6-NOF|7-INC|8-INC', '9-INC|10-INC|11-CHA|12-NOF|13-CHA|14-CHA|15-INC', '16-INC|17-INC' ]
解决方案
通过遍历list_1,按指定长度切片list_2,再用|连接切片元素即可实现需求,代码如下:
list_1 = [3, 5, 7, 2] list_2 = [ '1-CHA', '2-NOF', '3-INC', '4-CHA', '5-NOF', '6-NOF', '7-INC', '8-INC', '9-INC', '10-INC', '11-CHA', '12-NOF', '13-CHA', '14-CHA', '15-INC', '16-INC', '17-INC' ] final_list = [] start_idx = 0 for count in list_1: end_idx = start_idx + count # 切片并连接元素 final_list.append('|'.join(list_2[start_idx:end_idx])) start_idx = end_idx print(final_list)
代码说明
- 初始化
start_idx作为切片起始位置标记 - 遍历
list_1中的每个数字:- 计算切片结束位置
end_idx = start_idx + count - 对
list_2执行[start_idx:end_idx]切片,用'|'.join()将切片内元素拼接成字符串 - 将拼接结果加入
final_list - 更新
start_idx为当前end_idx,作为下一次切片的起始位置
- 计算切片结束位置
运行代码后即可得到目标final_list。
内容的提问来源于stack exchange,提问作者Duvan Smuts
相关产品推荐
相关产品推荐

