我們基本上都知道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