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

如何高效提取Python字符串列表中的所有唯一字符?

问题描述

现有输入变量列表如下:

field_list = ['u', 'w', 'uu', 'uv', 'uw']

需要输出列表中出现过的所有唯一字符组成的列表。
原先仅处理u、v、w三类字符的实现代码如下:

indv_fields = []

for field in field_list:
    if "u" in field:
        indv_fields.append("u")
    if "v" in field:
        indv_fields.append("v")
    if "w" in field:
        indv_fields.append("w")

indv_fields = list(set(indv_fields))
print(indv_fields)

现在需要扩展逻辑适配未知字符范围的场景,同时尽可能提升效率。比如输入如下列表时,原有代码无法提取到字符T:

field_list = ['u', 'v', 'w', 'T', 'ww']
实现方案

最简写法(无需严格保证输出顺序)

利用集合自动去重的特性,直接遍历所有字段的每个字符存入集合,再转列表即可。时间复杂度为O(N)(N为所有字段的总字符数),是该场景下的最优时间复杂度:

indv_fields = list({char for field in field_list for char in field})

针对测试样例field_list = ['u', 'v', 'w', 'T', 'ww'],运行后输出结果为['u', 'v', 'w', 'T'](顺序随Python版本可能略有差异)。

保证字符首次出现顺序的写法

如果需要输出顺序和字符首次出现的顺序保持一致(Python3.7+版本上述集合写法也会默认保留插入顺序,兼容旧版本可以用如下写法):

seen = set()
indv_fields = []
for field in field_list:
    for char in field:
        if char not in seen:
            seen.add(char)
            indv_fields.append(char)

该写法同样为*O(N)*时间复杂度,仅遍历所有字符一次,无多余运算。

内容的提问来源于stack exchange,提问作者Atharva Sunil Sathe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:03