Есть ли способ подстроки строки в Python, чтобы получить новую строку от третьего символа до конца строки?
Может быть, как myString[2:end]
?
Если выход из второй части означает «до конца», и если вы покидаете первую часть, начинается ли она с самого начала?
10 ответов
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
Python называет эту концепцию «нарезкой», и она работает не только над строками. Ознакомьтесь здесь, чтобы ознакомиться с подробным введением.
Может быть, я пропустил это, но я не смог найти полный ответ на этой странице на оригинальный вопрос (ы), потому что переменные здесь не обсуждаются. Поэтому мне пришлось продолжать поиски.
Поскольку мне еще не разрешено комментировать, позвольте мне добавить свое заключение здесь. Я уверен, что я был не единственным, кто заинтересовался этим при доступе к этой странице:
>>>myString = 'Hello World'
>>>end = 5
>>>myString[2:end]
'llo'
Если вы оставите первую часть, вы получите
>>>myString[:end]
'Hello'
И если вы оставите: посередине, вы получите простейшую подстроку, которая будет 5-м символом (отсчет начинается с 0, поэтому в данном случае это пробел):
>>>myString[end]
' '
Один пример здесь отсутствует: полная (мелкая) копия.
>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
Это распространенная идиома для создания копии типов последовательности (не интернированных строк), [:]
. Мелкие копии списка, см. Синтаксис фрагмента списка Python, используемый для очевидная причина .
Распространенным способом достижения этого является нарезка строк.
MyString[a:b]
дает вам подстроку из индекса a в (b - 1).
Использование жестко закодированных индексов само по себе может привести к путанице.
Чтобы избежать этого, Python предлагает встроенный объект slice()
.
string = "my company has 1000$ on profit, but I lost 500$ gambling."
Если мы хотим знать, сколько денег у меня осталось.
Нормальное решение:
final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500
Используя ломтики:
EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500
Используя слайс, вы получаете удобочитаемость.
Просто для полноты, как никто другой не упомянул об этом. Третий параметр для среза массива - это шаг. Таким образом, обращение строки так же просто, как:
some_string[::-1]
Или выбор альтернативных символов будет:
"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
Способность шагать вперед и назад через строку поддерживает согласованность с возможностью массива фрагментов с начала или конца.
Есть ли способ подстроки строки в Python, чтобы получить новую строку от 3-го символа до конца строки?
Может быть, как
myString[2:end]
?
Да, это действительно работает, если вы назначите или bind имя , end
, в постоянный синглтон, None
:
>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'
Запись среза имеет 3 важных аргумента:
- Начало
- стоп
- шаг
По умолчанию они не указаны None
, но мы можем передать их явно:
>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'
Если выход из второй части означает «до конца», если вы выходите из первой части, начинается ли она с самого начала?
Да, например:
>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'
Обратите внимание, что мы включаем начало в срез, но мы идем только до остановки, не включая ее.
Когда step None
, по умолчанию срез использует 1
для шага. Если вы шагнете с отрицательным целым числом, Python достаточно умен, чтобы идти от конца к началу.
>>> myString[::-1]
'0987654321'
Я объяснил нотацию среза очень подробно в моем ответе на вопрос об объяснении ноты среза.
Вы получили это прямо там, за исключением «конца». Это называется обозначение среза. Ваш пример должен читать:
new_sub_string = myString[2:]
Если вы пропустите второй параметр, это будет неявный конец строки.
Substr () обычно (то есть PHP и Perl) работает следующим образом:
s = Substr(s, beginning, LENGTH)
Итак, параметры: beginning
и LENGTH
.
Но поведение Python другое; он ожидает начала и одного после END (!). Это трудно обнаружить новичкам. Поэтому правильная замена для Substr (s, начало, LENGTH)
s = s[ beginning : beginning + LENGTH]
Если myString содержит номер счета, который начинается со смещения 6 и имеет длину 9, вы можете извлечь номер счета следующим образом: acct = myString[6:][:9]
.
Если ФП признает это, они, возможно, захотят попробовать экспериментальным путем:
myString[2:][:999999]
Это работает - никакой ошибки не возникает, и по умолчанию «заполнение строк» не происходит.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.