从字符串中删除重复字符

71
如何使用Python从字符串中删除重复的字符?例如,假设我有一个字符串:
foo = 'mppmt'

如何使字符串变成:

foo = 'mpt'

注意:顺序不重要。


4
咳咳... http://stackoverflow.com/questions/636977/best-way-to-remove-duplicate-characters-words-in-a-string - nullpotent
2
@AljoshaBre - 使用“关闭”按钮并选择“标记为重复项”,然后提供该链接。谢谢。 - Martin Beckett
3
这些答案都不能保证维持秩序。 - Marcin
链接实际上已经存在。只需要4个点击即可。 - ulidtko
16个回答

1

保持顺序的函数式编程风格:

import functools

def get_unique_char(a, b):
    if b not in a:
        return a + b
    else:
        return a

if __name__ == '__main__':
    foo = 'mppmt'

    gen = functools.reduce(get_unique_char, foo)
    print(''.join(list(gen)))

1
作为一个字符列表,将字符串转换为字典会删除所有重复项并保留顺序。

"".join(list(dict.fromkeys(foo)))


这只适用于Python3.6+。 - anthony sottile

0
 mylist=["ABA", "CAA", "ADA"]
 results=[]
 for item in mylist:
     buffer=[]
     for char in item:
         if char not in buffer:
             buffer.append(char)
     results.append("".join(buffer))
    
 print(results)

 output
 ABA
 CAA
 ADA
 ['AB', 'CA', 'AD']

0
from collections import OrderedDict
def remove_duplicates(value):
        m=list(OrderedDict.fromkeys(value))
        s=''
        for i in m:
            s+=i
        return s
print(remove_duplicates("11223445566666ababzzz@@@123#*#*"))


请学习这个答案:https://dev59.com/O2kw5IYBdhLWcg3wg62g#48255240。你将学会如何使用join()函数。 - Nik O'Lai

0
def remove_duplicates(value):
    var=""
    for i in value:
        if i in value:
            if i in var:
                pass
            else:
                var=var+i
    return var

print(remove_duplicates("11223445566666ababzzz@@@123#*#*"))

1
你可以随时编辑你的答案,而不是在自己的帖子下评论。此外,考虑添加任何代码解释。 - Pochmurnik

0

你可以替换匹配项

rgx = r'(.)(?=.*\1)'

使用空字符串。

import re

print(re.sub(rgx, '', 'abbcabdeeeafgfh'))
  #=> "cbdeagfh"

演示

正则表达式匹配任何字符 (.),将其保存到捕获组 1 ((.)) 中,并通过使用 正向预查 (?=.*\1) 要求相同的字符 (\1) 在字符串中后面出现。

在此示例中,第一个和第二个 'a' 被匹配,因此转换为空字符串,因为每种情况下字符串中都有另一个 'a'。字符串中的第三个 'a' 没有被匹配,因为后面没有 'a'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接