目标是删除字符串中重复的任何字符,但限制是唯一可以重复的字符是逗号“,”
也就是说,如果我在 Python 中有以下字符串:
universo = "a,f,h,4,a,h,g"
应该:
universo = "a,f,h,4,g"
使用以下代码删除重复的元素,但问题是它删除了包含的逗号:
universo = "".join(dict.fromkeys(universo))
我该如何解决?
目标是删除字符串中重复的任何字符,但限制是唯一可以重复的字符是逗号“,”
也就是说,如果我在 Python 中有以下字符串:
universo = "a,f,h,4,a,h,g"
应该:
universo = "a,f,h,4,g"
使用以下代码删除重复的元素,但问题是它删除了包含的逗号:
universo = "".join(dict.fromkeys(universo))
我该如何解决?
不保留顺序的解决方案
该函数
split(car)
允许拆分由指定字符分隔的字符串。在这种情况下,我们对除以逗号感兴趣,所以我们使用split(",")
.该函数从输入列表中
set
构建一个集合(set),删除重复项。我们通过
",".join()
在每个元素之间放置“,”来创建一个字符串。而已
产生:
解决方案保留顺序
使用 拆分字符串后
split
,我们遍历它形成列表sin_coma
,丢弃重复项:产生:
对于一个可以很好地适应大型列表(运行时间为 O(n) 而不是 O(n^2))的顺序保留版本,我们可以利用 Python 3.7 版字典保证插入顺序这一事实。
也就是说,在浏览字典时,键的出现顺序与插入时的顺序相同。另一方面,如果一个键已经存在于字典中,它就不会被再次插入,所以它是一个很好的去除重复的机制。
使用这个想法,您可以将代码减少到一行:
结果
nuevo
是"a,f,h,4,g"
它是如何工作的
我
",".join()
正在传递一个通过压缩在那里创建的字典。这本字典使用c
每个universo
由逗号分隔的字母作为键,使用 1 作为值(尽管值无关紧要)。第一次出现字母时,它会被插入到字典中,值为 1。第二次出现时,第一次出现的 1 将被覆盖(尽管再次使用值 1)。这些值是无关紧要的,因为我们感兴趣的是键( 的字母
universo
)以及它们首次插入的顺序。",".join()
将遍历该字典的键,将它们全部合并为一个以逗号分隔的字符串,从而实现所需的输出。