从列表中的单个字符串中删除重复项

2024-10-17 08:28:55 发布

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

我正在尝试编写一个python程序,如果给定一个字符串列表,它将从列表中的各个字符串中删除重复字符。我目前的工作是:

#program: removeduplicates.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-lst", nargs='+', type=str, required=True)
xyz = parser.parse_args()
duplist = xyz.lst

def duplicate_destoryer(duplist):
    finallist = []
    for word in duplist:
        x = set()
        list = []
        for ch in word:
            if ch not in x:
                set.add(ch)
                list.append(ch)
        finallist.append(list)

    return finallist


if __name__ == "__main__":
    print(duplicate_destoryer(duplist))

在我的命令行中输入

python removeduplicates.py -lst aarrtt ddwwtt

我想要的输出是(不管是在列表括号中还是简单地写出来):

art dwt

我写的代码在逻辑上是有意义的,但我不断发现错误,set对象的描述符'add'不适用于公平的'str'对象,但随着我进一步研究,我感觉我不断遇到越来越多的代码示例,其中set.add()用于字符串对象

有人能给我指出正确的方向或告诉我我做错了什么吗


Tags: 对象字符串inpyaddparser列表argparse
3条回答

你非常非常接近。只需使用以下内容:

x.add(ch)

而不是:

set.add(ch)

这将获取列表列表作为输出,而不是您期望的字符串列表。 要更正此问题,您可以执行以下操作:

finallist.append(''.join(list))

而不是:

finallist.append(list)

请注意,不应使用list作为变量名。它是一个内置的Python

这里有两件事:

  1. 无法添加到“集合”,因为集合实例是“x”。因此,将其替换为x.add(ch)
  2. 您正在收集列表列表中的输出,这不是您想要的。相反,您应该创建一个字符串列表来收集输出

以下是具有所需输出的修改版本:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-lst", nargs='+', type=str, required=True)
xyz = parser.parse_args()
duplist = xyz.lst

def duplicate_destoryer(duplist):
    finallist = []
    for word in duplist:
        x = set()
        output = ""
        for ch in word:
            if ch not in x:
                x.add(ch)
                output += ch
        finallist.append(output)

    return finallist


if __name__ == "__main__":
    print(duplicate_destoryer(duplist))

所指出的问题是,您正在使用

set.add(ch)

set引用的是set类,而不是实例。您的代码的修复程序是:

x.add(ch)

正如您所知,这也可以在一行中完成,但代价是降低代码的可读性,并且可能会丢失字符输入的顺序:

>>> words = ["aarrtt", "ddwwtt"]
>>> ["".join(set(list(word))) for word in words]
['art', 'dwt']

首先,通过将字符串强制转换为列表,将其转换为字符列表。然后删除将列表转换为集合的重复字符,然后使用join方法将其转换回字符串。我们在一个理解列表中执行所有这些操作,迭代每个传入字符串

相关问题 更多 >