如何将列表前半部分元素与后半部分元素交叉合并?
列表重组解决方案
需求明确
先把两种场景的重组规则理清楚:
- 嵌套列表的子列表处理:当子列表元素数超过2时,原列表前半部分是数据类型、后半部分是对应变量,要重组为「类型1、变量1、类型2、变量2...」的配对顺序。
- 6元素列表处理:前3个元素是数据类型,后3个是对应变量/空值,要重组为「类型1+对应变量1、类型2+对应变量2、类型3+对应变量3」的顺序。
代码实现
1. 通用重组函数
写一个能适配两种场景的函数,自动判断列表类型并处理:
def restructure_list(lst): # 处理6元素列表:前3个类型,后3个变量/None,一一配对 if len(lst) == 6: types = lst[:3] vars = lst[3:] result = [] for t, v in zip(types, vars): result.extend([t, v]) return result # 处理元素数>2且为偶数的子列表:前半类型、后半变量,配对重组 elif len(lst) > 2 and len(lst) % 2 == 0: half_len = len(lst) // 2 types = lst[:half_len] vars = lst[half_len:] result = [] for t, v in zip(types, vars): result.extend([t, v]) return result # 元素数≤2的列表直接返回副本(避免修改原列表) else: return lst.copy()
2. 处理嵌套列表
遍历嵌套列表,对每个子列表应用重组函数:
list_1 = [['void', None], ['uint8', 'f_MbistTestType_u8'], ['uint8', 'uint32', 'f_MbistTestType_u8', 'f_chip_id_u32'], ['void', None], ['void', None], ['void', None], ['void', None]] processed_list_1 = [restructure_list(sublist) for sublist in list_1] print(processed_list_1) # 输出结果:[['void', None], ['uint8', 'f_MbistTestType_u8'], ['uint8', 'f_MbistTestType_u8', 'uint32', 'f_chip_id_u32'], ['void', None], ['void', None], ['void', None], ['void', None]]
3. 处理6元素列表
直接调用重组函数即可:
list_example = ['uint8', 'uint32', 'void', 'f_chip_id_u32', 'f_MbistTestType_u8', None] list_example_sorted = restructure_list(list_example) print(list_example_sorted) # 输出结果:['uint8', 'f_chip_id_u32', 'uint32', 'f_MbistTestType_u8', 'void', None]
补充说明
- 如果遇到元素数为奇数且大于2的列表,可根据实际需求补充处理逻辑(当前需求未提及,函数默认返回原列表);
- 函数返回列表副本,如需直接修改原列表,可去掉
copy(),直接返回原列表。
内容的提问来源于stack exchange,提问作者Redal_Snake
相关产品推荐
相关产品推荐

