python list去重

list(set(args.core)) 是一种在 Python 中快速去除列表中重复元素的简洁方法。让我详细解释这个操作的实现原理和工作流程:

完整代码解析

python 复制代码
# 原始列表(可能包含重复元素)
cores = ['bl', 'ap', 'sensor', 'ap', 'bl']

# 步骤1: 使用 set() 创建集合
unique_set = set(cores)  # 结果: {'sensor', 'bl', 'ap'}

# 步骤2: 将集合转换回列表
unique_list = list(unique_set)  # 结果: ['sensor', 'bl', 'ap']

# 最终结果
print(unique_list)  # 输出: ['sensor', 'bl', 'ap'](顺序可能不同)

详细步骤说明

1. set(args.core) - 创建集合

  • 集合特性 :Python 的集合(set)是一种无序且元素唯一的数据结构

  • 去重原理:当将列表转换为集合时,所有重复元素会被自动移除

  • 示例 :

    python 复制代码
    >>> set(['a', 'b', 'a', 'c'])
    {'c', 'a', 'b'}  # 去除了重复的 'a'

2. list(...) - 转换回列表

  • 目的:将去重后的集合转换回列表类型

  • 注意:由于集合是无序的,转换后的列表顺序可能与原列表不同

  • 示例 :

    python 复制代码
    >>> list({'c', 'a', 'b'})
    ['c', 'a', 'b']  # 顺序可能每次运行都不同

为什么使用这种方法去重?

  1. 简洁高效:一行代码完成去重操作
  2. 时间复杂度:O(n) - 对于大多数情况都非常高效
  3. 代码可读性:清晰表达"我需要去重"的意图

保持顺序的去重方法

如果您需要保持元素的原始顺序,可以使用以下方法:

python 复制代码
def unique_ordered(items):
    seen = set()
    unique = []
    for item in items:
        if item not in seen:
            seen.add(item)
            unique.append(item)
    return unique

# 使用示例
cores = ['bl', 'ap', 'sensor', 'ap', 'bl']
unique_cores = unique_ordered(cores)  # 结果: ['bl', 'ap', 'sensor']

在您的脚本中的应用

在您的烧录脚本中,使用 list(set(args.core)) 是合适的,因为:

  1. 核心顺序不重要:烧录顺序由脚本逻辑控制,不是由用户输入顺序决定
  2. 高效去重:避免用户重复指定同一核心
  3. 代码简洁:一行代码完成去重,保持代码简洁

完整脚本中的去重逻辑

python 复制代码
# 处理核心列表
if 'all' in args.core:
    cores = SUPPORTED_CORES.copy()
else:
    # 去重处理
    cores = list(set(args.core))  # 去除重复的核心名称
    
    # 验证核心是否有效
    invalid_cores = [core for core in cores if core not in SUPPORTED_CORES]
    if invalid_cores:
        print(f"错误: 不支持的核心: {', '.join(invalid_cores)}")
        print(f"有效核心: {', '.join(SUPPORTED_CORES)}")
        sys.exit(1)

实际应用示例

用户输入重复核心

bash 复制代码
./flash_p62.py -c bl ap bl sensor -p 0 -t ACM -d nx

处理后的核心列表

python 复制代码
# 输入: args.core = ['bl', 'ap', 'bl', 'sensor']
cores = list(set(['bl', 'ap', 'bl', 'sensor'])) 
# 结果: ['sensor', 'bl', 'ap'] (顺序可能不同)

最终烧录的核心

脚本会烧录 sensor, bl 和 ap 核心,但只烧录一次,不会重复烧录 bl

注意事项

  1. 顺序不可控:集合是无序的,所以结果列表的顺序可能与输入不同
  2. 仅适用于可哈希类型:集合要求元素必须是可哈希的(字符串、数字等)
  3. 不适合自定义对象 :如果是自定义对象,需要实现 __hash__ 和 __eq__ 方法

在您的烧录脚本中,由于核心名称都是字符串,这种去重方法是最佳选择,既高效又简洁。

相关推荐
VidDown3 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频4 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook6 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺7 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
启观川8 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦8 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!8 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net
钱栈up9 小时前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析