Есть ли способ подстроить строку в Python?

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

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

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

1350
19 марта '09 в 20:29
источник поделиться
15 ответов
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

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

2061
19 марта '09 в 20:30
источник

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

some_string[::-1]

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

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

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

249
20 марта '12 в 3:58
источник

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

s = Substr(s, beginning, LENGTH)

Итак, параметры начинаются и LENGTH

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

s = s[ beginning : beginning + LENGTH]
73
04 авг. '12 в 14:43
источник

Общим способом достижения этой цели является нарезка строк. MyString[a:b] дает подстроку из индекса a (b - 1)

36
02 марта '12 в 8:19
источник

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

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

Это распространенная идиома для создания копии типов последовательностей (не интернированных строк). [:] Неглубоко копирует список, см. python-list-slice-used-for-no-obvious-reason.

19
19 марта '09 в 21:02
источник

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

myString[2:]
13
03 дек. '17 в 4:13

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

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

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

Обратите внимание, что мы включаем запуск в срез, но мы переходим только к остановке и не включаем.

Когда шаг None, по умолчанию срез использует 1 для шага. Если вы нажмете отрицательное целое число, Python достаточно умен, чтобы перейти от конца к началу.

>>> myString[::-1]
'0987654321'

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

5
24 июня '17 в 0:53
источник

У вас есть все, кроме "конца". Его названная нотация фрагмента. Ваш пример должен быть прочитан.

new_sub_string = myString[2:]

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

5
19 марта '09 в 20:31
источник

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

5
03 дек. '17 в 4:13

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

  • Вместо 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]
    
  • Python имеет slice objects:

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    
4
31 авг. '16 в 7:28
источник

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

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

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

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

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

 >>>myString[:end]
 'Hello' 

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

 >>>myString[end]
 ' '
3
18 марта '15 в 15:01
источник

mystring[2:]

3
03 дек. '17 в 4:13

вот какой-то метод для выполнения подстроки 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
03 дек. '17 в 4:13

Никто не упоминает об использовании индексов жесткого кода сам по себе, может быть беспорядок.

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

Вы можете заметить, что с помощью среза вы получаете удобочитаемость

1
31 авг. '16 в 7:50
источник

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

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

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

0
11 сент. '17 в 14:03
источник

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