删除列表中字符串中的重复字符串

时间:2014-11-21 04:54:29

标签: python string list

需要删除一些重复项。

列表包含元素,字符串包含以“;”分隔的字符串。每个字符串中的字符串可以重复。如:

"15-105;ZH0311;TZZGJJ; ZH0311; ZH0311;DOC",

字符串中有3个“ZH0311”(出现的数量不固定)。我需要消除重复项并将字符串细化为(内部字符串序列无关紧要):

"15-105;TZZGJJ; ZH0311;DOC",

我正在考虑将字符串拆分为“;”并将它们链接在一起。我怎样才能对整个清单做同样的事情?

a_list = [

"15~105;~ PO185-400CT;NGG;DOC",
"15~105;-1;NGG;DOC",
"15~105; 15~105; NGG;-10;NGG;DOC",
"15~55;J205~J208;POI;DOC",
"15-105;15-105;ZH0305~;WER /;TZZGJJ;DOC",
"15-105;ZH0311;TZZGJJ; ZH0311; ZH0311;DOC",
"15-115;15-115; PL026~ PL028; Dry;PTT"]

请注意字符串包含非ASCII字符。

顺便问一下: 区别在于它不是列表中的字符串,但列表中的列表和每个嵌套列表中的元素是否重复?

3 个答案:

答案 0 :(得分:3)

>>> a = "15-105;ZH0311;TZZGJJ; ZH0311; ZH0311;DOC"
>>> a = map(str.strip,a.split(';'))
>>> a
['15-105', 'ZH0311', 'TZZGJJ', 'ZH0311', 'ZH0311', 'DOC']
>>> a = sorted(set(a),key=lambda x:a.index(x))
>>> a
['15-105', 'ZH0311', 'TZZGJJ', 'DOC']
>>> ";".join(a)
'15-105;ZH0311;TZZGJJ;DOC'

我使用split来拆分它然后剥离以删除多余的空格。我使用set来删除重复,但设置dosent关心顺序。所以我需要按顺序排序

>>> def remove_duplication(my_list):
...     my_newlist = []
...     for x in my_list:
...         x = map(str.strip,x.split(';'))
...         my_newlist.append(";".join(sorted(set(x),key=lambda y:x.index(y))))
...     return my_newlist
... 
>>> remove_duplication(a_list)
['15~105;~ PO185-400CT;NGG;DOC', '15~105;-1;NGG;DOC', '15~105;NGG;-10;DOC', '15~55;J205~J208;POI;DOC', '15-105;ZH0305~;WER /;TZZGJJ;DOC', '15-105;ZH0311;TZZGJJ;DOC', '15-115;PL026~ PL028;Dry;PTT']

如果您的字符串由空格分隔:

>>> a="# -- coding: utf-8 --" 
>>> a= map(str.strip,a.split())
>>> a
['#', '--', 'coding:', 'utf-8', '--']
>>> a = " ".join(sorted(set(a),key=lambda x:a.index(x)))
>>> a
'# -- coding: utf-8'

split将字符串拆分为某个分隔符,可能是空格或字符,也可以是任何字符。

通过所有这些文档,您将理解。 Built-in typesBuilt-in function

答案 1 :(得分:1)

尝试将所有字符串放入一个集合之后将其删除:

def myFilter(lines):
    strings = []
    for curLine in lines:
        strings.extend([curString.strip() for curString in curLine.split(";")])
    return set(strings);

答案 2 :(得分:1)

您可以使用str.splitset

>>> s = "15-105;ZH0311;TZZGJJ; ZH0311; ZH0311;DOC"
>>> ';'.join(s.split(";"))
'15-105;ZH0311;TZZGJJ; ZH0311; ZH0311;DOC'
>>>