Как получить подстроку строки в Python?

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

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

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

Ответы

Ответ 1

>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

Python называет эту концепцию "срезанием", и она работает не только по строкам. Посмотрите здесь для всестороннего ознакомления.

Ответ 2

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

some_string[::-1]

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

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

Возможность перехода вперед и назад по строке поддерживает согласованность с возможностью массива среза с начала или конца.

Ответ 3

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

s = Substr(s, beginning, LENGTH)

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

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

s = s[ beginning : beginning + LENGTH]

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Да, это действительно работает, если вы присваиваете или связываете имя 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'

Я подробно объясню обозначение срезов в моем ответе на вопрос Объяснение обозначений срезов.

Ответ 7

Да, есть. Ваш пример очень близок:

myString[2:]

Ответ 8

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

new_sub_string = myString[2:]

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

Ответ 9

Я хотел бы добавить два момента к обсуждению:

  1. Вместо этого вы можете использовать None в пустом месте, чтобы указать "от начала" или "до конца":

    'abcde'[2:None] == 'abcde'[2:] == 'cde'
    

    Это особенно полезно в функциях, где вы не можете предоставить пустое пространство в качестве аргумента:

    def substring(s, start, end):
        """Remove 'start' characters from the beginning and 'end' 
        characters from the end of string 's'.
    
        Examples
        --------
        >>> substring('abcde', 0, 3)
        'abc'
        >>> substring('abcde', 1, None)
        'bcde'
        """
        return s[start:end]
    
  2. В Python есть слайс объекты:

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    

Ответ 10

myString[2:].. оставьте второй индекс, чтобы перейти в конец

Ответ 11

mystring[2:]

Ответ 12

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

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

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

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

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

 >>>myString[:end]
 'Hello' 

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

 >>>myString[end]
 ' '

Ответ 13

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

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

myString[2:][:999999]

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

Ответ 14

вот какой-то метод для выполнения подстроки string.using slicing и dicing.

>>> a = "Hello World"
>>> a[1:]
'ello World'
>>> a[2:]
'llo World'
>>> a[:1]
'H'
>>> a[:2]
'He'
>>> a[-1:]
'd'
>>> a[-2:]
'ld'
>>> a[:-1]
'Hello Worl'
>>> a[:-2]
'Hello Wor'

Ответ 15

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

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

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

Ответ 16

Я считаю, что это то, что вы ищете.

>>> s = 'Python'
>>> s = s[2:]
>>> print(s)
>>> 'thon'

Если вы хотите подстроить все после индекса 2 (включая 2), вы просто используете : и ничего больше. Надеюсь, что это поможет!