最後更新日期:2022 年 01 月 9 日

一、建立字串

在 Python 3 中,字串是一連串有序的 Unicode 字元,是的,與 Python 2 不同,Python3 預設的編碼就是 Unicode。

在 Python 中,字串可以被括在單引號 ( ' ) 中,或是雙引號 ( " ) 中,或是三引號 (""" 或 ''') 中。

str1 = 'Hello World.\n'
str2 = "Hello World.\n"
str3 = '''\nThis is line one
                this is line two.'''

使用單引號和雙引號並沒有任何區別,只是看你的使用習慣而已,其中的特殊字元都會被轉義,除非你特別指定該字串不轉義。

被三引號括住的稱為 docstrings,因為它們主要用於說明函式的用途。

被單引號和雙引號所括住的字串無法跨越多列,我們必須在同一列中以對應的引號結束字串,但 docstrings 可以跨越多列。

引號的混用有時會造成一些困擾,我們可以參考 PEP 8 及 PEP 257 的指導方針來使用會比較好一點。

二、常用的字串函式

print() 印出字串

a = 'apple'
b = "banana"
c = '''cherry'''

# 格式化輸出
print("There are %d fruits in the basket: %s, %s, %s" % (3, a, b, c))

print("%8d" % (1234))  # 寬度 8,靠右對齊
print("%-8d" % (1234))  # 寬度 8,靠左對齊
print("%08d" % (1234))  # 寬度 8,靠右對齊,空格補 0

print("%8s" % ("ABCDEF")) # 寬度 8,靠右對齊
print("%5s" % ("ABCDEF"))  # 寬度 5,超過全顯示
print("%5.3s" % ("ABCDEF"))  # 寬度 5,超過只顯示 3 個

print("%d" % (15))
print("%o" % (15))
print("%#o" % (15))
print("%x" % (15))
print("%#x" % (15))

len()-取得字串的長度

str1 = 'Hello'
print(len(str1))

str()-強制轉換型別為字串

Python 不會自動轉換型別,所以有時我們必須手動操作

str(99.8) # "99.8"
str(True) # "True"

price = 50
print(price)  # 這樣 ok
print("Price: ", price)  # 這樣也行
print("Price: " + str(price))  # 必須轉換型別
print("Price: " + price)  # 這樣會有錯誤,因為字串連結運算子只能用在字串型別

三、字串物件可以使用的方法

在 Python 中,所有的資料型態都是物件,可以使用其對應的物件方法

str1 = " TexT "  # 前後都有空白

# 去除掉前後的空白,
str1.strip()

# 去除掉左邊的空白
str1.lstrip()

# 去除掉右邊的空白
str1.rstrip()

# 找到出現 ex 的位置
str1.find('ex')

# 全轉為大寫
str1.upper()

# 全轉為小寫
str1.lower()

# 大小寫互換
str1.swapcase()

# 首字大寫
str1.capitalize()  # 這不會作用,因為首字為空白
str1.strip().capitalize()  # 必須先去除空白

# 字串取代
str2 = 'Hello world'
str2.replace('world', 'python')

四、字串的部份取值-slice

索引運算子(Index Operator)-取出指定位置的字元

字串可以被視為一種串列 (List),所以可以迭代它;也可以使用「[ ]」索引運算子取出指定位置的字元

letters = "abcdefghijklmnopqrstuvwxyz"
print(letters[1])  # 印出 b

str1 = 'Hello'
for c in str1:
    print(c)

# 也會印出 Hello
print(str1[0])
print(str1[1])
print(str1[2])
print(str1[3])
print(str1[4])

# 還是會印出 Hello
print(str1[-5])
print(str1[-4])
print(str1[-3])
print(str1[-2])
print(str1[-1])

參考:https://runestone.academy/ns/books/published//thinkcspy/Strings/IndexOperatorWorkingwiththeCharactersofaString.html

切片運算子 (Slicing Operator)-取出指定位置範圍的字串

letters = "abcdefghijklmnopqrstuvwxyz"
print(letters[1:4])  # 印出 bcd

參考:

https://runestone.academy/ns/books/published//fopp/Sequences/TheSliceOperator.html

五、字串的組合與分割

基本的組合方式

letters = "abc" + "def"  # "abcdef"

letters = "abc" + str(123)  # "abc123",數字型別必須轉換為字串

letters = "abc" * 3  # "abcabcabc"

.join()-將串列合併為字串

還可以像 PHP 的 implode

fruits = ['apple', 'banana', 'cherry']

str1 = ' '.join(fruits)  # 使用空白將字串組合
print(str1)  # 'apple banana cherry'

'-'.join(fruits)  # 使用 - 將字串組合
print(str2)  # 'apple-banana-cherry' 

.split()-將字串切為串列 (List)

這有點像 PHP 的 explode,可以將字串依特定的分隔字元切分成字串組成的串列 (List)

str1 = "apple banana cherry"
list1 = str1.split()  # 預設的分隔字元是空白
print(list1)  # ['apple', 'banana', 'cherry']

str2 = "apple, banana, cherry"
list2 = str2.split(',')
print(list2)  # ['apple', ' banana', ' cherry'] 注意!字串裏有空白
list3 = str2.split(', ')
print(list3)  # ['apple', 'banana', 'cherry']

https://stackoverflow.com/questions/3854867/what-is-for-python-what-explode-is-for-php

Last modified: 2022-01-09

Author

Comments

Write a Reply or Comment

Your email address will not be published.