Есть ли способ подстроки строки в Python, чтобы получить новую строку от третьего символа до конца строки?

Может быть, как myString[2:end]?

Если выход из второй части означает «до конца», и если вы покидаете первую часть, начинается ли она с самого начала?

2404
Joan Venge 19 Мар 2009 в 20:29

10 ответов

Лучший ответ
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

Python называет эту концепцию «нарезкой», и она работает не только над строками. Ознакомьтесь здесь, чтобы ознакомиться с подробным введением.

3090
Community 23 Май 2017 в 12:34

Может быть, я пропустил это, но я не смог найти полный ответ на этой странице на оригинальный вопрос (ы), потому что переменные здесь не обсуждаются. Поэтому мне пришлось продолжать поиски.

Поскольку мне еще не разрешено комментировать, позвольте мне добавить свое заключение здесь. Я уверен, что я был не единственным, кто заинтересовался этим при доступе к этой странице:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

Если вы оставите первую часть, вы получите

 >>>myString[:end]
 'Hello' 

И если вы оставите: посередине, вы получите простейшую подстроку, которая будет 5-м символом (отсчет начинается с 0, поэтому в данном случае это пробел):

 >>>myString[end]
 ' '
3
Rudi Uhl 18 Мар 2015 в 12:01

Один пример здесь отсутствует: полная (мелкая) копия.

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>

Это распространенная идиома для создания копии типов последовательности (не интернированных строк), [:]. Мелкие копии списка, см. Синтаксис фрагмента списка Python, используемый для очевидная причина .

23
Peter Mortensen 2 Янв 2019 в 16:23

Распространенным способом достижения этого является нарезка строк.

MyString[a:b] дает вам подстроку из индекса a в (b - 1).

57
Peter Mortensen 2 Янв 2019 в 16:24

Использование жестко закодированных индексов само по себе может привести к путанице.

Чтобы избежать этого, 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

Используя слайс, вы получаете удобочитаемость.

0
Peter Mortensen 22 Июн 2018 в 15:26

Просто для полноты, как никто другой не упомянул об этом. Третий параметр для среза массива - это шаг. Таким образом, обращение строки так же просто, как:

some_string[::-1]

Или выбор альтернативных символов будет:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

Способность шагать вперед и назад через строку поддерживает согласованность с возможностью массива фрагментов с начала или конца.

384
Endophage 4 Янв 2019 в 23:55

Есть ли способ подстроки строки в 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'

Я объяснил нотацию среза очень подробно в моем ответе на вопрос об объяснении ноты среза.

18
Aaron Hall 30 Сен 2017 в 02:00

Вы получили это прямо там, за исключением «конца». Это называется обозначение среза. Ваш пример должен читать:

new_sub_string = myString[2:]

Если вы пропустите второй параметр, это будет неявный конец строки.

8
Peter Mortensen 22 Июн 2018 в 15:23

Substr () обычно (то есть PHP и Perl) работает следующим образом:

s = Substr(s, beginning, LENGTH)

Итак, параметры: beginning и LENGTH.

Но поведение Python другое; он ожидает начала и одного после END (!). Это трудно обнаружить новичкам. Поэтому правильная замена для Substr (s, начало, LENGTH)

s = s[ beginning : beginning + LENGTH]
124
Peter Mortensen 22 Июн 2018 в 15:24

Если myString содержит номер счета, который начинается со смещения 6 и имеет длину 9, вы можете извлечь номер счета следующим образом: acct = myString[6:][:9].

Если ФП признает это, они, возможно, захотят попробовать экспериментальным путем:

myString[2:][:999999]

Это работает - никакой ошибки не возникает, и по умолчанию «заполнение строк» не происходит.

4
Peter Mortensen 5 Сен 2019 в 11:33