有时候我有这样的字符串
string = "Hett, Agva,"
,有时我会在其中重复。
string = "Hett, Agva, Delf, Agva, Hett,"
如何检查我的字符串中是否存在重复项,然后将其删除?
更新。
所以在第二个字符串中,我需要删除Agva和Hett,因为字符串中有2x个
答案 0 :(得分:2)
遍历各个部分(单词),并将每个部分添加到一组可见的部分中,如果该部分中还没有该部分,则将其添加到列表中。最后。重建字符串:
seen = set()
parts = []
for part in string.split(','):
if part.strip() not in seen:
seen.add(part.strip())
parts.append(part)
no_dups = ','.join(parts)
(请注意,由于此方法删除的某些单词的开头有空格,因此我必须向.strip()
添加一些调用)
给出:
'Hett, Agva, Delf,'
为什么要使用一套?
要查询某个元素是否为in
个集合,it is O(1)
average case-因为它们是由散列存储的,因此使查找保持恒定的时间。另一方面,列表中的查找为O(n)
,因为Python必须遍历该列表,直到找到该元素为止。这意味着使用set
可以更有效地执行此任务,因为对于每个新单词,您都可以立即检查以查看是否以前曾经见过,而您必须遍历{{1 }}的可见元素,否则将花费更长的时间。
哦,要检查是否有重复项,请查询拆分列表的长度是否与该列表的长度相同(删除重复项但会失去顺序)。
即
list
可以正常工作:
def has_dups(string):
parts = string.split(',')
return len(parts) != len(set(parts))
答案 1 :(得分:1)
如果单词顺序很重要,则可以在字符串中创建单词列表,然后遍历该列表以创建新的唯一单词列表。
string = "Hett, Agva, Delf, Agva, Hett,"
words_list = string.split()
unique_words = []
[unique_words.append(w) for w in words_list if w not in unique_words]
new_string = ' '.join(unique_words)
print (new_String)
输出:
'Hett, Agva, Delf,'
答案 2 :(得分:1)
您可以使用unique_everseen
文档中的toolz.unique
,或等效地使用itertools
recipe,或等效地使用@JoeIddon的显式解决方案。
这是使用第三方toolz
的解决方案:
x = "Hett, Agva, Delf, Agva, Hett,"
from toolz import unique
res = ', '.join(filter(None, unique(x.replace(' ', '').split(','))))
print(res)
'Hett, Agva, Delf'
我删除了空格,并使用filter
清理了可能不需要的结尾,
。
答案 3 :(得分:1)
如果仅会收到此格式的字符串,则可以执行以下操作:
import numpy as np
string_words=string.split(',')
uniq_words=np.unique(string_words)
string=""
for word in uniq_words:
string+=word+", "
string=string[:-1]
此代码的作用是将单词分成列表,找到唯一的项目,然后像以前一样将它们合并为字符串
答案 4 :(得分:0)
这看起来有点难看
float matrix[X][Y]
但是可以完成工作;)
希望有帮助!!请随时询问是否不清楚:)