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


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

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

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


1561


источник


Ответы:


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

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


2354



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

some_string[::-1]

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

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

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


297



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

s = Substr(s, beginning, LENGTH)

Итак, параметры начинаются и ДЛИНА

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

s = s[ beginning : beginning + LENGTH]

89



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


43



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

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

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


19



Is there a way to substring a string in Python, to get a new string from the 3rd character to the end of the string?

Maybe like myString[2:end]?

Yes, this actually works if you assign, or bind, the name,end, to constant singleton, None:

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

Slice notation has 3 important arguments:

  • start
  • stop
  • step

Their defaults when not given are None - but we can pass them explicitly:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

If leaving the second part means 'till the end', if you leave the first part, does it start from the start?

Yes, for example:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

Note that we include start in the slice, but we only go up to, and not including, stop.

When step is None, by default the slice uses 1 for the step. If you step with a negative integer, Python is smart enough to go from the end to the beginning.

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

I explain slice notation in great detail in my answer to Explain slice notation Question.


13



You've got it right there except for "end". Its called slice notation. Your example should read.

new_sub_string = myString[2:]

If you leave out the second param it is implicitly the end of the string.


7



I would like to add two points to the discussion:

  1. You can use None instead on an empty space to specify "from the start" or "to the end":

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

    This is particularly helpful in functions, where you can't provide an empty space as an argument:

    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 has slice objects:

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

6



Maybe I missed it, but I couldn't find a complete answer on this page to the original question(s) because variables are not further discussed here. So I had to go on searching.

Since I'm not yet allowed to comment, let me add my conclusion here. I'm sure I was not the only one interested in it when accessing this page:

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

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

If you leave the first part, you get

 >>>myString[:end]
 'Hello' 

And if you left the : in the middle as well you got the simplest substring, which would be the 5th character (count starting with 0, so it's the blank in this case):

 >>>myString[end]
 ' '

2



No one mention about using hardcode indexes itself can be a mess.

In order to avoid that, python offers a built-in object slice().

string = "my company has 1000$ on profit, but I lost 500$ gambling."

If we want to know how many money I got left.

Normal solution:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

Using slices:

EARNINGS = slice(15,19)
LOSSES = slice(43,46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

You can notice using slice you gain readability


0