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