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

Python:如何在保持输入列表顺序的同时实现去重?

解决列表去重同时保留原顺序的问题

嘿,我懂你的困扰——用set去重虽然一行代码搞定,但确实会把原列表的顺序搅得乱七八糟,这在需要保留元素出现顺序的场景下完全不适用。给你分享两个实用的解决方案:

方法一:手动遍历+已见集合(兼容所有Python版本)

这个方法逻辑很直观,通过遍历原列表,同时维护一个记录已出现元素的集合,只把第一次遇到的元素加入结果列表:

ls = eval(input("Input a list:"))
seen = set()
unique_list = []
for item in ls:
    if item not in seen:
        seen.add(item)
        unique_list.append(item)
print(unique_list)

原理很简单:每次检查当前元素是否已经被记录过,没记录过就同时更新集合和结果列表,完美保留原顺序。

方法二:利用字典的插入顺序(Python 3.7+ 适用)

从Python 3.7开始,字典会永久保留键的插入顺序,所以我们可以用dict.fromkeys()这个小技巧,一行代码实现去重+保序:

ls = eval(input("Input a list:"))
unique_list = list(dict.fromkeys(ls))
print(unique_list)

dict.fromkeys(ls)会创建一个以列表元素为键的字典(键自动去重),而且键的顺序和原列表中元素第一次出现的顺序一致,最后转成列表就搞定了,简洁又高效。

额外提醒:关于eval(input())的安全问题

你现在用的eval(input())虽然能解析输入的列表,但存在安全风险——如果有人输入恶意代码,会直接执行。建议换成更安全的ast.literal_eval():

import ast
ls = ast.literal_eval(input("Input a list:"))

它只会解析合法的Python字面量(比如列表、字典、字符串这些),不会执行任意代码,安全性高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:47:32