Python, задача удалить каждый третий символ
Помогите решить задачу - удалить каждый третий символ в строке. Видел как решают через срезы, я пытаюсь решить через замену. Код ниже:
s = input()
i = 0
while i != len(s):
if i % 3 == 0:
s = (s.replace(s[i], "$"))
i += 1
else:
i += 1
print(s.replace('$', ''))
при вводе hello
оставляет eo
Работает в случае, если нет 2 подряд одинаковых символов. В противном случае - удаляет оба. Посоветуйте как это можно исправить?
Ответы (4 шт):
Через замену не выйдет, потому что replace заменит в строке все такие символы, ему не важно, где этот символ находится, в той позиции, где вы его хотели заменить, или где-то ещё.
Поэтому вам нужно тем или иным способом считать позиции символов и убирать символы именно в нужных позициях, а не по значению самого символа. Позицию символа можно получать, например, с помощью enumerate:
s = 'hello1234567890'
print(''.join([x for i,x in enumerate(s) if i%3 != 2]))
# helo235689
s = '1233435637839'
skip = 3
print(''.join([s[i:i + skip - 1] for i in range(0, len(s), skip)])) # 123456789
вот еще пара вариантов для разнообразия:
from re import sub
s='1234567890'
print(sub(r'(.{2})(.)',r'\1',s))
# 1245780
from itertools import compress, cycle
s='1234567890'
print(''.join(compress(s,cycle([1,1,0]))))
# 1245780
Через промежуточное преобразование в список и удаление элементов среза:
s = '123456789123456789'
s1 = list(s)
del s1[2::3]
print(''.join(s1)) # 124578124578