Как сравнить элемент в списке со следующим элементом и отделить его, если он такой же? - PullRequest
1 голос
/ 07 ноября 2019

У меня есть строка, которая содержит случайные буквы и цифры, но если есть две буквы или цифры, которые являются одинаковыми и расположены рядом друг с другом, то вы должны разделить их с помощью "/". Таким образом, входная строка - "uBBjkko", и результат должен быть "uB/Bjk/ko".

. Сейчас я преобразовал свою строку в список, чтобы я мог сравнить каждый элемент со следующим:

mylist ['u', 'B', 'B', 'j', 'k', 'k', 'o']
for i in range(len(mylist)):
        if mylist[i] == mylist[i + 1]:
            mylist.insert(i + 1, "/")
print("".join(mylist))

но код не работает, если список становится слишком длинным, и если список заканчивается двумя одинаковыми буквами или цифрами, такими как

['u', 'B', 'B', 'j', 'k', 'k', 'o', '2', '2']

, тогда вывод будет "uB/Bjk/ko22", но это необходимобыть "uB/Bjk/ko2/2".

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Итак, как я сказал в комментарии, проблема в том, что вы вставляете во время итерации. Итерируя в обратном направлении от конца к началу, вы исправите это. Таким образом, ваша итерация не зависит от вставки:

mylist = ['u', 'B', 'B', 'j', 'k', 'k', 'o', '2', '2']
for i in range(len(mylist)-1, 0, -1): # This goes from len(mylist)-1 to 0 in -1 steps
    if mylist[i] == mylist[i-1]:
        mylist.insert(i, '/')
print("".join(mylist))
0 голосов
/ 07 ноября 2019
from itertools import zip_longest

mylist = ['u', 'B', 'B', 'j', 'k', 'k', 'o', '2', '2']
print("".join([a + ('/' if a == b else '') for a,b in zip_longest(mylist, mylist[1:], fillvalue='')]))

Хотя это может быть немного, вы можете узнать о модуле itertools. zip функция или zip_longest функция в этом случае и понимание списка тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...