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

Python嵌套列表切片提取去重生成指定列表A、B的实现方法求助

问题原因与最优实现

列表B错误原因

你写的列表B代码存在两个核心问题:

  • 集合(set)是无序数据结构,集合运算后转换回列表会完全丢失原有元素顺序
  • 集合会自动去重,当子列表存在和z[1:5]重复的元素时会被误删,比如最后一项里的711同时出现在索引1和索引6的位置,集合相减就会把索引6的711也删掉,导致元素缺失。

最优实现代码

列表A的现有逻辑完全符合要求可以直接使用,列表B直接按要求拼接指定索引的元素即可,既保留顺序也不会丢失元素,完整实现如下:

MAIN = [
        ['ABC', '562', '112', '80', '231', '217', '433', '115', '10'],
        ['ABC', '562', '112', '80', '231', '322', '202', '432', '12'],
        ['ABC', '562', '112', '80', '231', '677', '133', '255', '64'], 
        ['DEF', '711', '87', '319', '433', '981', '400', '100', '09'],
        ['DEF', '711', '87', '319', '433', '113', '210', '321', '51'],
        ['DEF', '711', '87', '319', '433', '921', '711', '991', '44']
       ]

# 列表A实现
A = []
for item in MAIN:
    prefix = item[:5]
    if prefix not in A:
        A.append(prefix)

# 列表B实现:取索引0 + 索引5到8的元素(切片左闭右开,因此写为5:9)
B = []
for item in MAIN:
    current = [item[0]] + item[5:9]
    B.append(current)

如果需要更简洁的写法,也可以用列表推导式实现:

# 列表A简洁版(Python 3.7+ 字典保留插入顺序,结果和预期完全一致)
A = list({tuple(item[:5]): item[:5] for item in MAIN}.values())

# 列表B简洁版
B = [[item[0]] + item[5:9] for item in MAIN]

内容的提问来源于stack exchange,提问作者Ger Cas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:15:02