length - python string substring




有沒有辦法在Python中對字符串進行子串處理? (7)

有沒有辦法在Python中對字符串進行子串處理,以便從第三個字符到字符串的末尾得到一個新的字符串?

也許像myString[2:end]

是的,如果您將名稱, end ,分配或bind為常量單例式,則這實際上起作用None

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

切片符號有三個重要參數:

  • 開始
  • 停止

沒有給出它們的默認值是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'

我在解釋切片符號問題的答案中詳細解釋切片符號。

有沒有辦法在Python中對字符串進行子串處理,以便從第三個字符到字符串的末尾得到一個新的字符串?

也許像myString[2:end]

如果離開第二部分意味著'直到結束',如果離開第一部分,它是否從一開始就開始?


Substr()通常(即PHP,Perl)以這種方式工作:

s = Substr(s, beginning, LENGTH)

所以參數開始和長度

但是Python的行為是不同的,它期望在END(!)之後開始。 初學者很難發現這一點。 所以正確的替代Substr(s,開始,LENGTH)是

s = s[ beginning : beginning + LENGTH]

也許我錯過了,但是我在這個頁面上找不到原始問題的完整答案,因為變量在這裡沒有進一步討論。 所以我不得不繼續尋找。

由於我還沒有被允許發表評論,所以讓我在這裡加上我的結論。 我確信在訪問此頁面時我不是唯一對此感興趣的人:

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

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

如果你離開第一部分,你會得到

 >>>myString[:end]
 'Hello' 

如果你離開了:在中間,你得到最簡單的子字符串,這將是第5個字符(從0開始計數,所以在這種情況下它是空白的):

 >>>myString[end]
 ' '

只是為了完整性,沒有人提到過它。 數組切片的第三個參數是一個步驟。 所以顛倒一個字符串就像下面這樣簡單:

some_string[::-1]

或者選擇替代字符將是:

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

在字符串中前後移動的能力與從開始或結束開始排列切片保持一致。


我想在討論中增加兩點意見:

  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有slice對象:

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

沒有人提及使用硬編碼索引本身可能是一團糟。

為了避免這種情況,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

你可以注意到使用切片你獲得可讀性


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

Python將這個概念稱為“切片”,它不僅僅適用於字符串。 here看一看全面的介紹。







string