Есть ли способ подстроки строки в Python, чтобы получить новую строку от третьего символа до конца строки?
Может как myString[2:end]
?
Если выход из второй части означает «до конца», и если вы покидаете первую часть, начинается ли она с самого начала?
Ответы:
Python называет эту концепцию «нарезкой», и она работает не только над строками. Посмотрите здесь для всестороннего введения.
источник
Просто для полноты, как никто другой не упомянул об этом. Третий параметр среза массива - это шаг. Таким образом, обращение строки так же просто, как:
Или выбор альтернативных символов будет:
Способность шагать вперед и назад через строку поддерживает согласованность с возможностью массива фрагментов с начала или конца.
источник
Substr () обычно (т.е. PHP и Perl) работает следующим образом:
Так что параметры есть
beginning
иLENGTH
.Но поведение Python другое; он ожидает начала и одного после END (!). Это трудно заметить начинающим. Таким образом, правильная замена для Substr (s, начало, LENGTH)
источник
s[beginning:][:length]
Распространенным способом достижения этого является нарезка строк.
MyString[a:b]
выдает подстроку из индекса a в (b - 1).источник
Один пример здесь отсутствует: полная (мелкая) копия.
Это общая идиома для создания копии типов последовательностей (не интернированных строк),
[:]
. Мелкие копии списка, см. Синтаксис фрагмента списка Python, используемый без видимой причины .источник
a=b
должно быть достаточно.[:]
на неизменяемый тип не делает копию вообще. Хотяmysequence[:]
в основном безвредно , когдаmysequence
непреложный тип , какstr
,tuple
,bytes
(PY3) илиunicode
(py2),a = b[:]
эквивалентноa = b
, он просто тратит мало времени диспетчерской кодов байт нарезки которых объект реагирует, возвращая себя , так как это бессмысленно для мелкого копирования , когда Помимо тестов на идентичность объекта, это эквивалентно просто возвращать другую ссылку на свое неизменное Я.s[:]
не делает копию на всех:s = 'abc'; s0 = s[:]; assert s is s0
. Да, это был идиоматический способ копировать список в Python до получения списковlist.copy
, но у полного фрагмента неизменяемого типа нет причины делать копию, потому что его нельзя изменить, поэтому в памяти может быть только один и мы не должны тратить время на его копирование. Поскольку этот ответ неверен и даже не отвечает на вопрос - его следует удалить?Да, это действительно работает, если вы присваиваете или привязываете имя
end
к константе синглтонаNone
:Запись среза имеет 3 важных аргумента:
Их значения по умолчанию, если они не указаны,
None
- но мы можем передать их явно:Да, например:
Обратите внимание, что мы включаем начало в срез, но мы идем только до остановки, не включая ее.
Когда step is
None
, по умолчанию срез используется1
для шага. Если вы пошлите с отрицательным целым числом, Python достаточно умен, чтобы идти от конца к началу.Я объясняю обозначение среза очень подробно в своем ответе на вопрос Объяснение обозначения среза.
источник
Вы получили это прямо там, за исключением «конца». Это называется обозначение среза. Ваш пример должен читать:
Если вы пропустите второй параметр, это будет неявный конец строки.
источник
Я хотел бы добавить два момента к обсуждению:
None
Вместо этого вы можете использовать пустое место, чтобы указать «от начала» или «до конца»:Это особенно полезно в функциях, где вы не можете предоставить пустое пространство в качестве аргумента:
В Python есть объекты срезов :
источник
Если туЗЬптд содержит номер счета , который начинается со смещением 6 и имеет длину 9, то вы можете извлечь номер банковского счета , таким образом:
acct = myString[6:][:9]
.Если ФП признает это, они, возможно, захотят попробовать экспериментальным путем:
Это работает - никакой ошибки не возникает, и по умолчанию «заполнение строк» не происходит.
источник
myString[offset:][:length]
в случае OP, вы можете просто использоватьmyString[offset:][:]
Может быть, я пропустил это, но я не смог найти полный ответ на этой странице на оригинальный вопрос (ы), потому что переменные здесь не обсуждаются. Поэтому мне пришлось продолжать поиски.
Поскольку мне еще не разрешено комментировать, позвольте мне добавить свое заключение здесь. Я уверен, что я был не единственным, кто заинтересовался этим при доступе к этой странице:
Если вы оставите первую часть, вы получите
И если вы оставите: посередине, вы получите простейшую подстроку, которая будет 5-м символом (отсчет начинается с 0, поэтому в данном случае это пробел):
источник
Ну, у меня возникла ситуация, когда мне нужно было перевести PHP-скрипт на Python, и он имел много применений
substr(string, beginning, LENGTH)
.Если бы я выбрал Python,
string[beginning:end]
мне пришлось бы рассчитывать много конечных индексов, поэтому проще было использоватьstring[beginning:][:length]
его, это избавило меня от многих проблем.источник
Использование жестко закодированных индексов само по себе может привести к путанице.
Чтобы избежать этого, Python предлагает встроенный объект
slice()
.Если мы хотим знать, сколько денег у меня осталось.
Нормальное решение:
Используя ломтики:
Используя слайс, вы получаете удобочитаемость.
источник