Я создал функцию, которая случайным образом генерирует список букв «a», «b», «c» и «d». Я хотел бы создать новый список, который совпадает с первым списком, но с удалением любых букв / элементов, которые совпадают с предыдущей буквой / элементом. Когда у меня возникают проблемы, я обращаюсь к предыдущей букве в списке.
Например, если:
letterlist = ['a','a','a','b','b','a,',b']
, тогда вывод должен быть,
nondupelist = ['a','b','a','b']
Проблема в том, что nodupeletterlist - это то же самое, что и список писем - то есть он не удаляет элементы, которые совпадают с последним - потому что я получаю функцию ссылки на предыдущий элемент в списке писем неправильно. Я пытался использовать индекс и перечислять, но я, очевидно, использую их неправильно, потому что я не получаю правильные результаты. Ниже моя текущая попытка.
import random
def rdmlist(letterlist, nodupeletterlist):
for item in range(20):
rng = random.random()
if rng < 0.25:
letterlist.append("a")
elif 0.25 <= rng and rng < 0.5:
letterlist.append("b")
elif 0.5 <= rng and rng < 0.75:
letterlist.append("c")
else:
letterlist.append("d")
for letter in letterlist:
if letter != letterlist[letterlist.index(letter)-1]:
nodupeletterlist.append(letter)
else:
pass
return
letterlist1 = []
nodupeletterlist1 = []
rdmlist(letterlist1, nodupeletterlist1)
РЕДАКТИРОВАТЬ: Это то, что я в конечном итоге использовал. Я использовал это решение просто потому, что понимаю, как оно работает. Ответы ниже могут предоставить более краткие или pythoni c решения.
for index, letter in enumerate(letterlist, start=0):
if 0 == index:
nodupeletterlist.append(letter)
else:
pass
for index, letter in enumerate(letterlist[1:], start = 1):
if letter != letterlist[index-1]:
nodupeletterlist.append(letter)
else:
pass