文章目錄
概述
什麼是容器?
容器是用於盛放元素的
由於盛有許多的元素,容器都是可以迭代遍歷的
最常用的容器包括【元組】、【列表】、【字典】、【集合】等
字符串是有序字符集,本質上也是容器
我們在對比和討論容器的特性時,最常考慮的因素有:
1、是否有序
2、是否可重複
3、如何訪問其中的元素
4、是否可以編輯
5、如何遍歷
第一節:字符串
字符串操作符
+
,用於字符串連接*
,用於多次重複
例如:
words = "sun"
words2 = "moon"
print(words + words2)
print(words * 3)
執行結果:
字符串長度
如果我們想知道一段字符串到底有多長,可以用len()
進行查看,而不是一個一個數
例:
#這裏有26個字母,或者更多時,使用len()
words = "abcdefghijklmnopqrstuvwxyz"
print(len(words))
#字符串的長度,包含了空格在內
words2 = "I love you"
print(len(words2))
執行結果:
比較字符串大小
字符串之間的比較,是按當前字符集中序號的順序排列,前小後大
print("abc" > "def") # False,按當前字符集中序號的順序排列
print("中國" > "美帝") # False,按當前字符集中序號的順序排列
字符串截取(切片)
字符串[開始位置:結束位置:步長]
開始結束位置的原則是:含頭不含尾,即結束位置的那個字符不會被截取
步長2代表每2個取第一個,3代表每三個取第一個
步長爲-N時,代表從後向前截取,仍然是每N個取一個
例如:
mstr = "getsomething"
# 從0載取到總長度(最後)
print(mstr[0:len(mstr)])
#從0截取到第5位(注意含頭不含尾,所以以6做結束)
print(mstr[0:6])
#從0截取到倒數第4位
print(mstr[0:-3])
#從第5位截取到最後
print(mstr[5:])
#從0截取到第4位
print(mstr[:5])
#從頭截到尾
print(mstr[:])
#從0截取到最後,步長爲2
print(mstr[0::2])
#從頭截到尾,步長爲-2
print(mstr[::-2])
執行結果:
判斷有無子串
- 使用
in
關鍵字可以判斷子串是否在大串中 - 使用
find
函數返回子串出現的位置,如子串不存在則返回-1 - 使用
index
函數同樣返回子串位置,但子串不存在就會報錯
例如:
mstr = "天下武功唯快不破"
#"武功"是否在mstr裏面
print("武功" in mstr) # True
#"武術"是否在mstr裏面
print("武術" in mstr) # False
#在mstr裏尋找"不破"
print(mstr.find("不破")) # 6
#在mstr裏尋找"武術"
print(mstr.find("大破")) # -1
#在mstr裏出現""武功的下標是?
print(mstr.index("武功")) # 2
print(mstr.index("武術")) #此方法找不到會報錯
字符串的格式化
capitalize()
,首字母大寫title()
,每個單詞的首字母大寫lower()
,全小寫upper()
,全大寫
例如:
mStr = "hello world,hello python"
#字母全大寫
print(mStr.upper())
#字母全小寫
print(mStr.lower())
#所有單詞首字母大寫
print(mStr.title())
#僅開頭首字母大寫
print(mStr.capitalize())
執行結果:
編碼解碼
encode()
,編碼爲字節decode()
,將字節解碼爲字符串,注意主語是字節而非字符串
例如:
#例1
words = "太陽當頭照,花兒對我笑"
#以gbk字符集編碼將字符串編碼爲字節數組
wordBytes = words.encode(encoding="gbk")
print(wordBytes)
#以gbk字符集編碼將字節數組解碼爲字符串
turnBytes = wordBytes.decode(encoding="gbk")
print(turnBytes)
print("——"*20)#此處只爲分隔
例2:
words2 = "早起的鳥兒有蟲吃"
#以utf-8字符集編碼將字符串編碼爲字節數組
wordBytes2 = words2.encode(encoding="utf-8")
print(wordBytes2)
#以utf-8字符集編碼將字節數組解碼爲字符串
turnBytes2 = wordBytes2.decode(encoding="utf-8")
print(turnBytes2)
執行結果:
搜索與替換
find()
,尋找子串位置,沒有返回-1index()
,尋找子串位置,沒有報錯count()
,統計子串出現次數replace()
,替換子串爲新的字符串
例如:
mStr = "太陽當頭照,花兒對我笑,太陽不見了"
#搜索“花兒”的位置
print(mStr.find("花兒"))
#搜索出現“花兒”的下標
print(mStr.index("花兒"))
#搜索“flower”的位置,-1表示子串不存在
print(mStr.find("flower"))
#搜索出現“flower”的下標位置,注意當子串不存在,將會報錯,而不是返-1
# print(mStr.index("flower")) # ValueError: substring not found
print("——————————————————————————————————")#此處只爲分隔
#將“太陽”替換爲Sun,替換1處
print(mStr.replace("太陽", "Sun", 1))
#將全部“太陽”替換爲“Sun”
print(mStr.replace("太陽", "Sun")) # fuck world,fuck python 全部hello替換爲fuck
print("——————————————————————————————————")#此處只爲分隔
#數一數子串“太陽”出現的次數
print(mStr.count("太陽"))
#在0-6位字符中,子串“太陽”出現的次數
print(mStr.count("太陽", 0, 6)) # 1 hello子串出現的次數,範圍爲0-6位字符
執行結果:
判斷頭尾與數字
isdigit()
,判斷是否爲數字子串startswith()
,判斷是否以子串開頭endswith()
,判斷是否以子串結尾
例如:
words = "太陽當頭照,花兒對我笑"
words2 = "3145926"
#判斷words是不是數字字符串
print(words.isdigit()) # False
#判斷words2是不是數字字符串
print(words2.isdigit()) # True
#判斷words是不是以“太陽”子串開頭
print(words.startswith("太陽")) # True
#判斷words是不是以“Sun”子串開頭
print(words2.startswith("Sun")) # False
#判斷words是不是以“笑”子串結尾
print(words.endswith("笑")) # True
拆開與重組
split(“,”)
,以逗號切分子串,形成一個列表join()
,用分隔符連接子串,主語爲分隔符,參數爲字符串
例如:
words = "hello,world,hello,python"
#將字符串words用“,”分割成四個字符串
print(words.split(","))
words2 = "我愛你中國"
#將字符串打散爲字符,並以-連接形成新字符串
print("-".join(words2))
執行結果:
第二節:元組
元組的特點
- 元組是一種
有序
、不可編輯
的元素容器; - 可以通過
下標
訪問元組中的元素; - 其它迭代器對象(如列表、字符串等)可以通過類型強轉轉換爲元組對象;
創建元組
- 通過
( )
直接賦值創建 - 將多個值賦值給一個變量,則該變量是元組類型
例:
#直接使用括號可創建元組
mtuple = ()
print(type(mtuple))
#元組可以通過括號直接賦值,值的類型可以多樣化(整形、浮點型、字符串、複數等)
mtuple2 = (1, 1.2, True, "hello", 3 + 4j, None)
print(mtuple2)
#將多個值賦值給一個變量,則該變量是元組類型
ytuple = 1, 1.2, True, "hello", 3 + 4j, None
print(ytuple,type(ytuple))
#指定變量個數形成的元組,可直接找到指定變量
ytuple2 = width, height = 300, 400
print(ytuple2,type(ytuple2))
print(width)
執行結果: