这个函数如何在python工作中从字符串中删除重复的字符?

时间:2015-03-31 04:26:12

标签: python

我正在查找如何创建一个函数,从python中的字符串中删除重复的字符,并在堆栈溢出时发现:

    from collections import OrderedDict

    def remove_duplicates (foo) :
        print " ".join(OrderedDict.fromkeys(foo))

它有效,但如何?我已经搜索了OrderedDict和fromkeys的含义,但我无法找到解释它在这种情况下如何工作的任何内容。

2 个答案:

答案 0 :(得分:11)

我会试一试:

OrderedDict是存储键的字典,以便添加它们。普通词典不适合。如果您查看fromkeys doc ,就会发现:

  

OD.fromkeys(S [,v]) - >带有来自S的键的新有序字典。

因此,fromkeys类方法使用输入可迭代S中的项(在我的示例中,字符串中的字符)作为键创建OrderedDict。在字典中,键是唯一的,因此忽略S中的重复项。

例如:

s = "abbcdece" # example string with duplicate characters

print(OrderedDict.fromkeys(s))

这导致OrderedDict:

OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)])

然后" ".join(some_iterable)采用iterable并在这种情况下使用空格连接其元素。它只使用键,因为字典的迭代是通过键来完成的。例如:

for k in OrderedDict.fromkeys(s): # k is a key of the OrderedDict
    print(k)

结果:

a
b
c
d
e

随后,请致电加入:

print(" ".join(OrderedDict.fromkeys(s)))

将打印出来:

a b c d e

使用set

有时候,人们会使用一套:

print( " ".join(set(s)))
# c a b d e

但与C ++中的set不同,python中的set不保证顺序。因此,使用集合可以轻松地为您提供唯一值,但它们可能采用不同的顺序,然后它们位于原始列表或字符串中(如上例所示)。

希望这有点帮助。

答案 1 :(得分:1)

按列表理解

print ' '.join([character for index, character in enumerate(foo) if character not in foo[:index]])