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

2025-02-08 08:52:00
admin
原创
69
摘要:问题描述:如何使用 Python 从字符串中删除重复的字符?例如,假设我有一个字符串:foo = 'mppmt' 我怎样才能制作字符串:foo = 'mpt' 注意:顺序并不重要解决方案 1:如果顺序不重要,你可以使用"".join(set(foo)) set()将在字符串中创建一组唯一的...

问题描述:

如何使用 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''。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用