Другой подход, с объяснением:
Если вам нужно обработать предложение, в котором будут включены пробелы, вы можете сделать это, используя нарезку. На строку нарезка работает:
[start_of_string:end_of_string:jump_this_many_char_in_string]
Итак, вы хотите, чтобы перейти только каждую вторую букву, так что вы делаете:
[::2]
Первые две пустые, потому что вы просто хотите выйти каждую секунду персонаж.
Таким образом, вы можете сделать это в одной строке, например:
>>> " ".join(i[::2] for i in "Hello World".split())
'Hlo Wrd'
Что произошло выше, мы берем строку, используйте split
, чтобы сделать его список. Раскол по умолчанию будет разделен на пространстве, таким образом, мы будем иметь:
["Hello", "World"]
Тогда, что мы будем делать оттуда, использует понимание, итерацию по каждому пункту списка, который даст нам слово в то время, и оттуда мы выполним требуемую манипуляцию с строкой за i[::2]
.
Понимание является: (documentation)
i[::2] for i in "Hello World".split()
Наконец, мы называем "".join
(doc), который теперь будет меняться наш список обратно в строку, чтобы наконец дать нам выход:
"Hlo Wrd"
Ознакомьтесь с разделом нарезки из документов: https://docs.python.org/3/tutorial/introduction.html
... указательный строка находится вне диапазона. Это не должно удивлять, учитывая, что вы повторяете последний индекс * и добавляете два к нему *. – jonrsharpe
@jonrsharpe Я думаю, что IndexError возникает, когда «char» равен индексу _penultimate_ (поскольку мы добавляем 2). – pie