Вставить пробелы в строку по известным индексам
У меня есть строка и я кодом сохраняю индексы в список. Например у меня была такая строка
str_old = "sdf dsf hgfh"
И получился такой список хранящий индекс где был пробел
index_prob = [3, 7]
Далее у меня в строке удаляются лишние пробелы и я получаю такую строку
str_new = "sdfdsfhgfh"
Теперь в такую же строку по длине(там будут другие символы, но для примера оставим эту) должны вставиться пробелы из списка. У меня были попытки со срезами но это не работает так как надо. Может есть другой способ?
encrypt2 = ""
k = 0
pov = 0
if(len(index_prob) > 0):
while( k < len(index_prob)):
if k == 0:
encrypt2 += str_new[ : index_prob[k]] + " "
print(encrypt2)
elif k == len(index_prob) - 1:
encrypt2 += str_new[index_prob[k] - k : ]
print(encrypt2)
else:
encrypt2 += str_new[len(encrypt2) - 1 : index_prob[k] - 1] + " "
print(encrypt2)
k += 1
print(encrypt2)
Такой вопрос. Как мне вставить пробелы в строку, по индексам хранящимся в списке. Это так же должно работать когда есть много пробелов. Подскажите пожалуйста.
str = "sdf dsf hgfh"
sdfdsfhgfh
[3, 4, 5, 9, 10]
Ответы (3 шт):
Чтобы удалить в списке пробелы, можно сделать так:
a = "ab cd ef gh"
b = a.split()
b = "".join(b)
print(b)
split("<symbol>") нужен чтобы разделить на данный символ, оставьте пустым чтобы делить на пробелы.
"<symbol>".join(<list>) нужен чтобы добавить все части символом. Оставьте пустым если не надо что-то добавлять внутри каждого элемента.
Если я правильно понял задачу, то можно предложить что-то такое
string = "sdf dsf hgfh"
spaces_idx = [i for i in range(len(string)) if string[i] == ' ']
no_space_string = string.replace(' ', '')
alter_string_orig = 'alopjokgwe'
alter_string_symbols = [*alter_string_orig]
while spaces_idx:
alter_string_symbols.insert(
spaces_idx.pop(0),
' '
)
alter_string_w_spaces = ''.join(alter_string_symbols)
print(string, alter_string_w_spaces, sep='\n')
Вывод:
sdf dsf hgfh
alo pjo kgwe
slices(indices) выдаёт последовательность сегментов индексов. Для списка [3, 7] получатся три сегмента [0:3], [3:6], [6:].
insert_spaces(s, indices) разрезает строку на куски и соединяет их через пробел. Готово за линейное время.
def slices(indices):
prev_k = 0
for i, j in enumerate(indices):
k = j - i
yield slice(prev_k, k)
prev_k = k
yield slice(prev_k, None)
def insert_spaces(s, indices):
return ' '.join(s[sl] for sl in slices(indices))
print(insert_spaces('sdfdsfhgfh', [3, 7]))
$ python insert-spaces.py sdf dsf hgfh