从字符串中删除重复的字符

时间:2012-03-23 14:50:12

标签: python

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

foo = 'mppmt'

如何制作字符串:

foo = 'mpt'

注意:订单并不重要

14 个答案:

答案 0 :(得分:74)

如果订单无关紧要,您可以使用

"".join(set(foo))

set()将在字符串中创建一组唯一字母,"".join()将以任意顺序将字母连接回字符串。

如果订单 很重要,您可以在Python 2.7或更高版本中使用collections.OrderedDict

from collections import OrderedDict
foo = "mppmt"
result = "".join(OrderedDict.fromkeys(foo))

生成字符串"mpt"

答案 1 :(得分:37)

如果订单确实重要,那么:

>>> foo = 'mppmt'
>>> ''.join(sorted(set(foo), key=foo.index))
'mpt'

答案 2 :(得分:7)

如果订单不是问题:

>>> foo='mppmt'
>>> ''.join(set(foo))
'pmt'

保持订单:

>>> foo='mppmt'
>>> ''.join([j for i,j in enumerate(foo) if j not in foo[:i]])
'mpt'

答案 3 :(得分:3)

在Python中创建一个列表,也是一个不允许任何重复的集合。 解决方案1:

def fix(string):
    s = set()
    list = []
    for ch in string:
        if ch not in s:
            s.add(ch)
            list.append(ch)

    return ''.join(list)        

string = "Protiijaayiiii"
print(fix(string))

方法2:

s = "Protijayi"

aa = [ ch  for i, ch in enumerate(s) if ch not in s[:i]]
print(''.join(aa))

答案 4 :(得分:3)

#We can do it simply by using Regex libs of python.

#Check code and apply in your Program:

#Input= 'pppmm'

import re as reg
s='ppppmm'
pattern=reg.compile(r"(.)\1{1,}",reg.DOTALL)
string=pattern.sub(r"\1",s)
print(string)

#Output: pm

答案 5 :(得分:2)

如果订单很重要,

seen = set()
result = []
for c in foo:
    if c not in seen:
        result.append(c)
        seen.add(c)
result = ''.join(result)

或者没有套装:

result = []
for c in foo:
    if c not in result:
        result.append(c)
result = ''.join(result)

答案 6 :(得分:2)

如前所述“”.join(set(foo))和collections.OrderedDict将会这样做。 添加foo = foo.lower()以防字符串具有大写和小写字符,并且您需要删除所有重复项,无论它们是大写还是小写字符。

from collections import OrderedDict
foo = "EugeneEhGhsnaWW"
foo = foo.lower()
print "".join(OrderedDict.fromkeys(foo))

打印eugnhsaw

答案 7 :(得分:2)

def dupe(str1):
    s=set(str1)

    return "".join(s)
str1='geeksforgeeks'
a=dupe(str1)
print(a)

如果顺序不重要,效果很好。

答案 8 :(得分:2)

d = {}
s="YOUR_DESIRED_STRING"
res=[]
for c in s:
    if c not in d:
      res.append(c)
      d[c]=1
print ("".join(res))

答案 9 :(得分: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#*#*"))

答案 10 :(得分:0)

由于字符串是字符列表,因此将其转换为字典将删除所有重复项并保留顺序。

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

答案 11 :(得分: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#*#*"))

答案 12 :(得分: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']

答案 13 :(得分:0)

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

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)))