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

时间:2019-06-27 17:50:07

标签: python

我有一个列表是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']

3 个答案:

答案 0 :(得分:9)

您可以先使用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']

答案 1 :(得分:0)

您可以尝试一下。这样会创建一个新列表,其中没有重复的内容,也没有'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代码是大多数情况下使用的代码。

答案 2 :(得分:-1)

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

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