如何在Python中删除重复的子字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中删除重复的子字符串相关的知识,希望对你有一定的参考价值。

我有一部分重复的字符串,我想删除所有重复的“子字符串”而又不丢失字符串中单词的顺序。

例如:"12 PL DE LA HALLE BP 425 BRIVE-LA-GAILLARDE BP 425 BRIVE-LA-GAILLARDE BP 425 BRIVE-LA-GAILLARDE BP 425 BRIVE-LA-GAILLARDE"

这里"BP 425 BRIVE-LA-GAILLARDE"重复4次。

我希望该字符串最终成为已删除重复项的"12 PL DE LA HALLE BP 425 BRIVE-LA-GAILLARDE"

更多重复的子字符串示例:

 "TOUR SOCIETE SUISSE  1 BD VIVIER MERLE  1 BD VIVIER MERL"
      => "TOUR SOCIETE SUISSE  1 BD VIVIER MERLE"

 "2 PARC DES ERABLES  66 RTE DE SARTROUVILLE  66 RTE DE SARTROUVILLE"
      => "2 PARC DES ERABLES  66 RTE DE SARTROUVILLE"

 "CASERNE AUDEOUD  111 AV DE LA CORSE  111 AV DE LA CORSE"
      => "CASERNE AUDEOUD  111 AV DE LA CORSE"

感谢任何帮助。

答案

您尝试这个。

s="TOUR SOCIETE SUISSE  1 BD VIVIER MERLE  1 BD VIVIER MERL"
seen=set()
new_s=' '.join([seen.add(word) or word for word in s.split() if word not in seen])
# 'TOUR SOCIETE SUISSE 1 BD VIVIER MERLE MERL'
s="12 PL DE LA HALLE  BP 425 BRIVE-LA-GAILLARDE  BP 425 BRIVE-LA-GAILLARDE  BP 425 BRIVE-LA-GAILLARDE  BP 425 BRIVE-LA-GAILLARDE"
seen=set()
new_s=' '.join([seen.add(word) or word for word in s.split() if word not in seen])
# '12 PL DE LA HALLE BP 425 BRIVE-LA-GAILLARDE'
另一答案

请检查此。

str = "2 PARC DES ERABLES  66 RTE DE SARTROUVILLE  66 RTE DE SARTROUVILLE"

output_str = ""
output_list =[]
for sub_str in str.split():
    if sub_str not in output_list:
        output_list.append(sub_str)
        output_str = output_str + " " + sub_str

print(output_str.strip())

另一答案

分割成多个部分,用dict使其唯一,然后重新加入?

>>> s = "12 PL DE LA HALLE  BP 425 BRIVE-LA-GAILLARDE  BP 425 BRIVE-LA-GAILLARDE  BP 425 BRIVE-LA-GAILLARDE  BP 425 BRIVE-LA-GAILLARDE"
>>> '  '.join(dict.fromkeys(s.split('  ')))
'12 PL DE LA HALLE  BP 425 BRIVE-LA-GAILLARDE'

以上是关于如何在Python中删除重复的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

[在python中使用正则表达式搜索字符串子字符串

使用 Python 的字符串子序列内核和 SVM

sql server 里类似replace的字符串子串删除

PB中取字符串子串的函数是啥

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)

如何更改python字符串子字符串信息