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

2024-09-24 06:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

需要删除一些重复项。你知道吗

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

"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字符。

顺便问一下: 不是列表中的字符串,而是列表中的列表和每个嵌套列表中的元素都是重复的,这有区别吗?你知道吗


Tags: 字符串元素列表doc顺序次数list名单
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'

我已经使用分裂分裂,然后剥离,以消除额外的空间。我用set来消除重复,但set不关心顺序。所以我需要按顺序排序

>>> 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拆分某个分隔符上的字符串,它可以是空格punchuatation或字符,也可以是任何内容。

看了所有这些文件,你就会明白了。Built-in typesBuilt-in function

您可以使用str.splitset

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

试着把所有的线都放在一个集合里,就像这样:

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

相关问题 更多 >