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

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

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

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

+1955
источник поделиться
16 ответов
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

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

+2927
источник

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

some_string[::-1]

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

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

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

+359
источник

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

s = Substr(s, beginning, LENGTH)

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

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

s = s[ beginning : beginning + LENGTH]
+108
источник

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

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

+52
источник

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

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

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

+21
источник

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

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

+18
источник

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

myString[2:]
+13

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

new_sub_string = myString[2:]

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

+8
источник

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

  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'
    
+6
источник

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

+5

mystring[2:]

+3

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

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

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

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

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

 >>>myString[:end]
 'Hello' 

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

 >>>myString[end]
 ' '
+3
источник

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

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

myString[2:][:999999]

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

+3
источник

вот какой-то метод для выполнения подстроки 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'
+2

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

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

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

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

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос