You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表前半部分元素与后半部分元素交叉合并?

列表重组解决方案

需求明确

先把两种场景的重组规则理清楚:

  1. 嵌套列表的子列表处理:当子列表元素数超过2时,原列表前半部分是数据类型、后半部分是对应变量,要重组为「类型1、变量1、类型2、变量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:50:24