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
相关产品推荐
相关产品推荐

