歡迎光臨
每天分享高質量文章

深入淺談:Python字串切片操作

 

我們基本上都知道Python的序列物件都是可以用索引號來取用的元素的,索引號可以是正數由0開始從左向右,也可以是負數由-1開始從右向左。

 

在Python中對於具有序列結構的資料來說都可以使用切片操作,需註意的是序列物件某個索引位置傳回的是一個元素,而切片操作傳回是和被切片物件相同型別物件的副本。

 

今天戀習Python主要與大家一起談談Python字串切片操作的那些事。

 

一、字串的切片

 

字串 ‘xxx’和 Unicode字串 u’xxx’也可以看成是一種list,每個元素就是一個字元。因此,字串也可以用切片操作,只是操作結果仍是字串。在很多程式語言中,針對字串提供了很多各種擷取函式,其實目的就是對字串切片。Python沒有針對字串的擷取函式,只需要切片一個操作就可以完成,非常簡單。

 

切片操作(slice)可以從一個字串中獲取子字串(字串的一部分)。我們使用一對方括號、起始偏移量start、終止偏移量end 以及可選的步長step 來定義一個分片。

 

格式: [start:end:step]

 

  •  [:] 提取從開頭(預設位置0)到結尾(預設位置-1)的整個字串
  •  [start:] 從start 提取到結尾
  •  [:end] 從開頭提取到end – 1
  •  [start:end] 從start 提取到end – 1
  •  [start:end:step] 從start 提取到end – 1,每step 個字元提取一個
  •  左側第一個字元的位置/偏移量為0,右側最後一個字元的位置/偏移量為-1

 

二、實戰

 

任務:

 

請設計一個函式,它接受一個字串,然後傳回一個僅首字母變成大寫的字串。提示:利用切片操作簡化字串操作。

 

字串有個方法 upper() 可以把字元變成大寫字母,但它會把所有字母都變成大寫。

 

print('abc'.upper())

ABC

 

而我們只想讓字串的首字母變大寫,因此可以透過使用字串的切片操作來實現,程式碼如下:

 

def firstCharUpper(s):
    return s[0].upper() + s[1:]

print(firstCharUpper('hello'))

Hello

 

習題:Leetcode 28.實現strStr() By Python

 

給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)。如果不存在,則傳回  -1。

 

示例 1:

輸入: haystack = "hello", needle = "ll"輸出: 2

示例 2:

輸入: haystack = "aaaaa", needle = "bba"輸出: -1

 

關鍵思維:需要從haystack 字串擷取一個完整的 needle 字串,自然而然想到字串的切片方法

 

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if not needle:
            return 0

        h_h = len(haystack)
        h_n = len(needle)

        if h_h             return -1

        for i in range(h_h - h_n + 1):

            if haystack[i:i+h_n] == needle:
                return i
        return -1

    贊(0)

    分享創造快樂