如何使用Python从字符串中删除重复的字符?例如,假设我有一个字符串:
foo = 'mppmt'
如何使字符串变成:
foo = 'mpt'
注意:顺序不重要。
foo = 'mppmt'
如何使字符串变成:
foo = 'mpt'
注意:顺序不重要。
如果顺序不重要,你可以使用
"".join(set(foo))
set()
会创建一个字符串中唯一字母的集合,而"".join()
将这些字母以任意顺序拼接回字符串。
如果顺序很重要,可以使用dict
代替set。从Python 3.7开始,字典保留键的插入顺序(在CPython实现中,这在Python 3.6中已作为实现细节支持)。
foo = "mppmt"
result = "".join(dict.fromkeys(foo))
结果为字符串"mpt"
。在早期版本的Python中,您可以使用collections.OrderedDict
,该模块从Python 2.7开始提供。
如果顺序有重要性,那么可以考虑这样:
>>> foo = 'mppmt'
>>> ''.join(sorted(set(foo), key=foo.index))
'mpt'
如果顺序不重要:
>>> foo='mppmt'
>>> ''.join(set(foo))
'pmt'
为了保持顺序:>>> foo='mppmt'
>>> ''.join([j for i,j in enumerate(foo) if j not in foo[:i]])
'mpt'
在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))
方法二:
s = "Protijayi"
aa = [ ch for i, ch in enumerate(s) if ch not in s[:i]]
print(''.join(aa))
方法三:
dd = ''.join(dict.fromkeys(a))
print(dd)
正如所提到的那样,可以使用 "".join(set(foo)) 和 collections.OrderedDict 来实现。如果字符串有大写和小写字符并且您需要删除所有重复项,无论它们是大写还是小写字符,请添加 foo = foo.lower()。
from collections import OrderedDict
foo = "EugeneEhGhsnaWW"
foo = foo.lower()
print "".join(OrderedDict.fromkeys(foo))
打印 eugnhsaw
#Check code and apply in your Program: #Input= 'pppmm'
s = 'ppppmm'
s = ''.join(set(s))
print(s)
#Output: pm
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)
seen = set(); ''.join(seen.add(c) or c for c in foo if c not in seen)
。今天是隐式胜于显式的星期五。 - Marcinresult += c
是不符合 Python 风格的,因为它每次都会创建新的字符串。 - Steven Rumbalskiresult+=c
操作。字符串是不可变的,每次添加字符都需要创建和销毁字符串。 - the wolf使用正则表达式:
import re
pattern = r'(.)\1+' # (.) any character repeated (\+) more than
repl = r'\1' # replace it once
text = 'shhhhh!!!
re.sub(pattern,repl,text)
输出:
sh!
def dupe(str1):
s=set(str1)
return "".join(s)
str1='geeksforgeeks'
a=dupe(str1)
print(a)
如果顺序不重要,那么它的效果很好。
d = {}
s="YOUR_DESIRED_STRING"
res=[]
for c in s:
if c not in d:
res.append(c)
d[c]=1
print ("".join(res))
在for循环中,变量'c'遍历字符串's',并检查c是否在集合d中(该集合最初没有元素)。如果c不在d中,则将c附加到字符数组'res',然后将集合d的索引c更改为1。循环结束后,即c完成遍历整个字符串以在集合d中存储唯一元素,打印所有唯一字符的结果'res'。