如何删除此列表中的重复元素?

Posted

技术标签:

【中文标题】如何删除此列表中的重复元素?【英文标题】:How to delete repeat elements in this list? 【发布时间】:2019-11-09 18:54:41 【问题描述】:

我有一个列表是a = ['R','R','R','B','R','B','B','S','S']。我的目标是删除重复的“R”和“S”,然后删除“B”(如果只有一个 R 或 S,就保留它)。因此,我希望输出为 ['R','R','S'],但我的是 ['R','S']。 谁能帮我看看我的代码?谢谢

这是我的代码

a = ['R','R','R','B','R','B','B','S','S']  # create a list to store R S B

a = [x for x in a if x != 'B']  # Delete all the B's

new_list = []  # create another list to store R and S without repeat
last = None
for x in a:
    if last == x and (len(new_list) == 0 or new_list[-1] != x):
        new_list.append(last)
    last = x
print(new_list)

我的输出是这样的

['R', 'S']

但我想要这个

['R','R','S']

【问题讨论】:

delete every repeat R's and S's between B.,那么不应该删除R's,因为B和S之间没有重复的R 重新阅读后,我删除了下面的答案,因为您的问题实际上没有意义。在您开始的列表中,B 之间没有重复的 R 或 S。根据这个描述,您的结果应该是['R','R','R','B','R','B','B','S','S'],所以要么您的描述是错误的,要么您的结果是错误的。请澄清。 我认为我的描述是错误的。如果没有重复就保留它。输出是我想要的。不管有多少个R B S,我只想在删除B后只保留R和S一次。这样有意义吗? @WenxuanLi,但您似乎也在删除重复的 R 和 S 值,这些值在 B 之间 not。我认为我下面的答案是您正在寻找的,但不是不好解释。也许你应该说你想删除组合在一起的 R 和 S 的重复。 是的,也许我的描述很混乱,但我不想在 B 之前或之后重复 R 和 S。 【参考方案1】:

您可以先使用itertools.groupby 对元素进行分组,然后删除B 值:

from itertools import groupby

a = ['R','R','R','B','R','B','S','S']  # create a list to store R S B
[k for k, v in groupby(a) if k != 'B']

结果:

['R', 'R', 'S']

【讨论】:

【参考方案2】:

你可以试试这个。这将创建一个新列表,其中没有任何重复内容,也没有“B”。

a = ['R','R','R','B','R','B','B','S','S']

new_list = []  # create another list to store R and S without repeat
last = None

for x in a:
    if last != x and x!='B':
        new_list.append(x)
    last = x
print(new_list)

另一种选择是使用列表推导:

a = ['R','R','R','B','R','B','B','S','S']
new_list = [ x for i,x in enumerate(a) if (a[i-1] != x and x!='B') or (i==0) ]
print(new_list)

两个例子的输出都是一样的:

['R', 'R', 'S']

这些选项都不需要导入。但是,我认为 Mark Meyer 给出的 groupby 代码是我在大多数情况下会使用的。

【讨论】:

【参考方案3】:

在这种情况下,您可以使用fromkeys

mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))
print(mylist) # ['a', 'b', 'c']

【讨论】:

问错了吗?这在这里毫无意义。 这给出了 ['R', 'B', 'S'] 这不是提问者想要的输出。

以上是关于如何删除此列表中的重复元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表删除函数中的重复元素?

如何使用原始元素删除 ArrayList 中的重复值[重复]

如何在保留顺序的同时删除列表中的重复元素?

如何使用 Dart / Flutter 中的列表从列表中删除重复元素?

如何从字典中的列表中删除元素[重复]

如何在c ++中删除嵌套列表中的重复元素