У меня есть список 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']
1
Wenxuan Li 27 Июн 2019 в 20:50

3 ответа

Лучший ответ

Вы можете попробовать это. Это создает новый список без всего, что является повторением, и без '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']

Ни один из этих параметров не требует импорта. Тем не менее, я думаю, что групповой код, данный Марком Мейером, - это то, что я бы использовал в большинстве случаев.

0
28 Июн 2019 в 01:01

Вы можете использовать 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']
9
Mark Meyer 27 Июн 2019 в 17:53

Вы можете использовать fromkeys в этом случае.

mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))
print(mylist) # ['a', 'b', 'c']
-1
Aman Raheja 27 Июн 2019 в 18:16