Удалить дубликаты набора символов в строке - Python - PullRequest
0 голосов
/ 05 мая 2020

У меня есть строка '1a1b1c1d3e3e3e1f1g2h2h1i1j1k1l1m1n4o4o4o4o1p1q2r2r1s2t2t2u2u1v1w1x1y1z', и я хочу удалить все дубликаты этих фрахтователей: 3e, 4o, 2r et c. Как это сделать в Python?

Ответы [ 3 ]

6 голосов
/ 05 мая 2020
str_='1a1b1c1d3e3e3e1f1g2h2h1i1j1k1l1m1n4o4o4o4o1p1q2r2r1s2t2t2u2u1v1w1x1y1z'
seen = set()
result = []
n=2
for i in range(0,len(str_),n):
    item=str_[i:i+n]
    if item not in seen:
        seen.add(item)
        result.append(item)
1 голос
/ 05 мая 2020

Это довольно грубый способ сделать это.
Но это похоже на то, чтобы выполнить работу без особых сложностей.

Это также предполагает, что вам необходимо удалить известные композиции персонажей. Вы не упомянули, что вам нужно удалить все дубликаты, только набор известных.

x = '1a1b1c1d3e3e3e1f1g2h2h1i1j1k1l1m1n4o4o4o4o1p1q2r2r1s2t2t2u2u1v1w1x1y1z'
for y in ['3e', '4o', '2r']:
    x = x[:x.find(y)+len(y)] + x[x.find(y)+len(y):].replace(y, '')
print(x)

Находит первое появление желаемого объекта (3e например) и строит новую версию строки до этого объекта включительно и добавляет строку с оставшейся частью исходной строки, но с заменой вашего объекта пустой строкой.

Это немного медленно, но, опять же, выполняет свою работу. Здесь нет обработки ошибок, поэтому будьте осторожны с -1 позициями и c.

0 голосов
/ 05 мая 2020

Вы можете использовать понимание списка и настроить это следующим образом:

s = '1a1b1c1d3e3e3e1f1g2h2h1i1j1k1l1m1n4o4o4o4o1p1q2r2r1s2t2t2u2u1v1w1x1y1z' s = [s[i:i+2] for i in range(0, len(s) - 1, 2)] s = set(s)

Надеюсь, это поможет

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