gpt4 book ai didi

python - 删除列表中字符串中的重复字符串)

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:21 25 4
gpt4 key购买 nike

需要删除一些重复项。

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

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

顺便提个问题:是不是列表中不是字符串,而是列表中的列表和每个嵌套列表中的元素是重复的?

最佳答案

>>> 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 来删除重复,但 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 在某个分隔符上分割字符串,可以是空格,也可以是字符,也可以是任何东西。

通读所有这些文档,您就会明白。 Built-in types , Built-in function

关于python - 删除列表中字符串中的重复字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27054358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com