如何使用Python从字符串中删除重复的字符?例如,假设我有一个字符串:
foo = 'mppmt'
如何制作字符串:
foo = 'mpt'
注意:订单并不重要
答案 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)))