从字符串中删除重复的字符
- 2025-02-08 08:52:00
- admin 原创
- 68
问题描述:
如何使用 Python 从字符串中删除重复的字符?例如,假设我有一个字符串:
foo = 'mppmt'
我怎样才能制作字符串:
foo = 'mpt'
注意:顺序并不重要
解决方案 1:
如果顺序不重要,你可以使用
"".join(set(foo))
set()
将在字符串中创建一组唯一的字母,并"".join()
以任意顺序将这些字母连接回字符串。
如果顺序确实重要,则可以使用 adict
而不是 set,因为 Python 3.7 会保留键的插入顺序。(在 CPython 实现中,这已在 Python 3.6 中作为实现细节得到支持。)
foo = "mppmt"
result = "".join(dict.fromkeys(foo))
得到字符串"mpt"
。在早期版本的 Python 中,可以使用collections.OrderedDict
,它从 Python 2.7 开始可用。
解决方案 2:
如果顺序确实 重要,那么如何:
>>> foo = 'mppmt'
>>> ''.join(sorted(set(foo), key=foo.index))
'mpt'
解决方案 3:
如果顺序不是问题:
>>> foo='mppmt'
>>> ''.join(set(foo))
'pmt'
保持秩序:
>>> foo='mppmt'
>>> ''.join([j for i,j in enumerate(foo) if j not in foo[:i]])
'mpt'
解决方案 4:
在 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))
方法3:
dd = ''.join(dict.fromkeys(a))
print(dd)
解决方案 5:
如上所述,"".join(set(foo)) 和 collections.OrderedDict 可以做到。如果字符串包含大写和小写字符,则添加 foo = foo.lower(),并且您需要删除所有重复项,无论它们是大写还是小写。
from collections import OrderedDict
foo = "EugeneEhGhsnaWW"
foo = foo.lower()
print "".join(OrderedDict.fromkeys(foo))
打印 eugnhsaw
解决方案 6:
#Check code and apply in your Program: #Input= 'pppmm'
s = 'ppppmm'
s = ''.join(set(s))
print(s)
#Output: pm
解决方案 7:
使用正则表达式:
import re
pattern = r'(.)+' # (.) any character repeated (+) more than
repl = r'' # replace it once
text = 'shhhhh!!!'
re.sub(pattern,repl,text)
输出:
sh!
解决方案 8:
如果顺序很重要,
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)
解决方案 9:
def dupe(str1):
s=set(str1)
return "".join(s)
str1='geeksforgeeks'
a=dupe(str1)
print(a)
如果顺序不重要,则效果很好。
解决方案 10:
d = {}
s="YOUR_DESIRED_STRING"
res=[]
for c in s:
if c not in d:
res.append(c)
d[c]=1
print ("".join(res))
变量“c”在 for 循环中遍历字符串“s”,并检查 c 是否在集合 d 中(最初没有元素),如果 c 不在 d 中,则将 c 附加到字符数组“res”,然后集合 d 的索引 c 更改为 1。退出循环后,即 c 完成遍历字符串以在集合 d 中存储唯一元素后,将打印包含所有唯一字符的结果 res。
解决方案 11:
由于字符串是字符列表,将其转换为字典将删除所有重复项并保留顺序。
"".join(list(dict.fromkeys(foo)))
解决方案 12:
保持顺序的函数式编程风格:
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)))
解决方案 13:
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#*#*"))
解决方案 14:
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#*#*"))
解决方案 15:
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']
解决方案 16:
您可以替换
rgx = r'(.)(?=.*)'
带有空字符串。
import re
print(re.sub(rgx, '', 'abbcabdeeeafgfh'))
#=> "cbdeagfh"
演示
正则表达式匹配任何字符(.
),将其保存到捕获组 1((.)
),并要求(通过使用正向前瞻 (?=.*)
)相同的字符()出现在字符串的后续位置。
在该示例中,第一个和第二个'a'
' 匹配,因此转换为空字符串,因为在每种情况下,'a'
字符串后面都有另一个 '。'a'
字符串中的第三个 ' 不匹配,因为字符串后面没有'a'
'。
扫码咨询,免费领取项目管理大礼包!