序列
我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、吳忠ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的吳忠網(wǎng)站制作公司
索引
序列是一塊用于放置多個(gè)值得連續(xù)存儲(chǔ)空間,并且按特定順序排列,每個(gè)值(稱為元素)都分配一個(gè)整數(shù)(由左至右則從 0 開始;由右至左則從 -1 開始),稱為索引(index)或位置,如下所示:
可以根據(jù)索引獲取每個(gè)元素實(shí)際的值
string = "飛流直下三千尺,疑是銀河落九天。"
print(string[5])
復(fù)制
則上面的語(yǔ)句的運(yùn)行結(jié)果為“千”。
切片
切片是訪問序列中元素的另一種方法,該方法可以訪問一定范圍內(nèi)的元素。
1
sequence[startIndex : endIndex : step]
復(fù)制
如果 startIndex 未指定,則默認(rèn)從 0 開始;如果 endIndex 未指定,則默認(rèn)一直到最后才結(jié)束切片;如果 step 未指定,則默認(rèn)為 1,且其前面的冒號(hào)可以省略。
序列相加
在 Python 中支持將多個(gè)相同類型的序列相加(或者說拼接更準(zhǔn)確),該操作只是單純的將序列拼接在一起,而不進(jìn)行其他附加的任何運(yùn)算。
seq_1 = "飛流直下三千尺,"
seq_2 = "疑是銀河落九天。"
print(seq_1 + seq_2)
復(fù)制
當(dāng)然,拼接之后實(shí)際上就是得到了一個(gè)新的序列,其索引將會(huì)重新排序。
序列相乘
數(shù)學(xué)意義上的乘法就是將一個(gè)數(shù)重復(fù)相加若干次之后得到一個(gè)結(jié)果,序列的乘法同樣如此,也是將一個(gè)序列重復(fù)拼接若干次之后得到一個(gè)新的序列。
1
2
sequence = "Hello, Python !"
print(sequence * 3)
復(fù)制
in
in 關(guān)鍵字用于檢查某個(gè)元素是否在被檢測(cè)的序列中,
1
element in sequence
復(fù)制
在 in 的前面加上 not 關(guān)鍵字,則表示檢查某個(gè)元素是否不在被檢測(cè)的序列中,
1
element not in sequence
復(fù)制
如果滿足以上兩種操作,則返回 True,否則返回 False。
len()
len() 方法用于計(jì)算序列的長(zhǎng)度,即序列中元素的個(gè)數(shù),
1
len(sequence)
復(fù)制
max()
max() 方法用于計(jì)算序列中元素的最大值
1
max(sequence)
復(fù)制
我們知道數(shù)字可以比較大小,那么序列(如字符串、列表等)是如何比較大小的呢?序列在比較大小的時(shí)候,會(huì)先將元素按照 ASCII 碼表轉(zhuǎn)換成數(shù)字,然后再進(jìn)行比較,這樣就可以得出最大值或者最小值了,如:
1
2
seq = "Hello, Python!"
print(max(seq))
復(fù)制
得到的結(jié)果是小寫字母 y 。
max() 函數(shù)會(huì)先將 seq 的所有元素(每個(gè)字母、標(biāo)點(diǎn))轉(zhuǎn)換成 ASCII碼值,然后取出碼值最大的元素打印出來。我們常用的字符,如數(shù)字、字母等,在 ASCII 碼表中的碼值大小依次是 數(shù)字<大寫字母<小寫字母。當(dāng)然,ASCII 碼表中不只包含數(shù)字、字母,其中還有許多標(biāo)點(diǎn)符號(hào)、特殊符號(hào)(具體碼表請(qǐng)自行查找)。
當(dāng)然,如果我們想驗(yàn)證 max() 函數(shù)得到的結(jié)果是否正確,可以使用 ord() 函數(shù)獲取 seq 中每個(gè)元素的 ASCII 碼值,
seq = "Hello, Python!"
lst = []
for n in range(len(seq)):
lst.append(ord(seq[n]))
print(lst)
復(fù)制
得到的結(jié)果是 [72, 101, 108, 108, 111, 44, 32, 80, 121, 116, 104, 111, 110, 33],從中可以看出最大值是 121,然后我們?cè)儆?chr() 函數(shù)看看 ASCII 碼值 121 對(duì)應(yīng)的字符是什么,
1
print(chr(121))
復(fù)制
得到的結(jié)果也是小寫字母 y 。
min()
min() 函數(shù)用于計(jì)算序列中元素的最小值,原理同 max() 函數(shù)一樣。
字符串
字符串就是連續(xù)的字符序列,可以是計(jì)算機(jī)能夠表示的所有字符的集合。
字符串不可變,在 Python 編程中,因?yàn)闆]有設(shè)置字符(char)類型,所以字符串通常使用引號(hào)(包括單引號(hào)、雙引號(hào)、三引號(hào))括起來,這三種引號(hào)沒有本質(zhì)上的差別,只是單引號(hào)、雙引號(hào)中的內(nèi)容必須在同一行,而三引號(hào)可以在連續(xù)的多行上。
常用操作
拼接字符串
使用 “+” 運(yùn)算符可以將多個(gè)字符串拼接在一起,從而生成一個(gè)字符串。
重復(fù)字符串
使用 ”*“ 運(yùn)算符可以重復(fù)字符串,類似數(shù)字的乘法。
計(jì)算字符串的長(zhǎng)度
使用 len() 函數(shù)可以獲取字符串中字符的個(gè)數(shù),
1
len(string)
復(fù)制
其中,string 表示要統(tǒng)計(jì)長(zhǎng)度的字符串。
en() 函數(shù)在計(jì)算字符串長(zhǎng)度時(shí),不區(qū)分符號(hào)、數(shù)字、英文和漢字,所有字符均按一個(gè)字符進(jìn)行計(jì)算。
但是,根據(jù)編碼方式的不同,字符所占的字節(jié)數(shù)也不同(這里主要針對(duì)漢字,如采用 GBK/GB2312 編碼,漢字占 2 個(gè)字節(jié);而如果采用 UTF-8/unicode 編碼,則漢字占 3 或 4 個(gè)字節(jié)。在 Python 編程中,數(shù)字、英文、符號(hào)、下劃線和空格均占一個(gè)字節(jié))。所以,如果需要取得字符串實(shí)際所占的字節(jié)數(shù),就需要通過 encode() 方法指定編碼格式,例如:
print(len("提放有度,自在為人;保持前進(jìn),以致更好!".encode("utf-8")))
print(len("提放有度,自在為人;保持前進(jìn),以致更好!".encode("gbk")))
復(fù)制
根據(jù)運(yùn)行結(jié)果可以看出,同一句話,采用 UTF-8 編碼方式每個(gè)漢字字符占 3 個(gè)字節(jié),而如果采用 GBK 編碼方式則每個(gè)漢字字符占 2 個(gè)字節(jié)。
截取字符串
截取字符串采用切片的方式實(shí)現(xiàn),
1
string[startIndex : endIndex : step]
復(fù)制
分割 & 合并字符串
分割字符串
把字符串按照指定的分隔符分成字符串列表,該列表中的元素不包含分隔符,
1
string.split(symbol, maxsplit)
復(fù)制
其中,symbol 表示分隔符;maxsplit 表示分割次數(shù),如果不指定則不限制次數(shù)。
1
print("提放有度,自在為人,保持前進(jìn),以致更好".split(","))
復(fù)制
合并字符串
合并字符串正好與分割相反,是將多個(gè)字符串采用固定的分隔符連接在一起,
1
string = symbol.join(sequence)
復(fù)制
例如,
1
2
3
list = ["小明", "小紅", "小剛"]
string = "@".join(list)
print(string)
復(fù)制
檢索字符串
在 Python 中提供多種語(yǔ)句查找指定字符串的方法。
count()
該方法用于檢索指定字符串在另一個(gè)字符串中出現(xiàn)的次數(shù),如果不存在則返回 0,否則返回出現(xiàn)的次數(shù),
1
string.count(substring, startIndex, endIndex)
復(fù)制
string 表示被被查找的字符串;substring 表示查找的子串;startIndex 表示起始位置的索引,默認(rèn)為零;endIndex 表示結(jié)束位置的索引,默認(rèn)為最后一個(gè)字符的索引。
1
print(["小明", "小紅", "小剛"].count("小紅"))
復(fù)制
find()
該方法用于檢測(cè)是否包含指定的子字符串,如果不存在則返回 -1,否則返回首次出現(xiàn)該子字符串的索引,
1
string.find(substring, startIndex, endIndex)
復(fù)制
例如,
1
print("小明和小剛一起去小紅家里做客".find("小紅"))
復(fù)制
in
該關(guān)鍵字用于判斷子字符串是否在目標(biāo)字符串中存在,是則返回 True,否則返回 False,
1
substring in string
復(fù)制
例如,
if "小紅" in ["小明", "小紅", "小剛"]:
print("TRUE")
else:
print("FALSE")
復(fù)制
index()
index() 和 find() 方法類似,也是用于檢測(cè)目標(biāo)字符串是否包含指定的子字符串,但是使用 index() 方法檢測(cè)時(shí),如果不存在則會(huì)拋出異常,
1
string.index(substring, startIndex, endIndex)
復(fù)制
例如,
1
print(["小明", "小紅", "小剛"].index("小紅"))
復(fù)制
startswith()
該方法檢測(cè)目標(biāo)字符串是否以指定的子字符串開頭,如果是則返回 True,否則返回 False,
1
string.startswith(substring, startIndex, endIndex)
復(fù)制
例如,
1
print("小紅邀請(qǐng)小明和小剛來家里做客".startswith("小紅"))
復(fù)制
endswith()
該方法檢測(cè)目標(biāo)字符串是否以指定的子字符串結(jié)尾,如果是則返回 True,否則返回 False,
1
string.endswith(substring, startIndex, endIndex)
復(fù)制
字母大小寫轉(zhuǎn)換
lower()
該方法用于將字符串中的大寫字母轉(zhuǎn)換為小寫字母。
1
string.lower()
復(fù)制
upper()
該方法用于將字符串中的小寫字母轉(zhuǎn)換為大寫字母。
1
string.upper()
復(fù)制
去除空格 & 特殊字符
strip()
該方法用于去除字符串左、右兩側(cè)的空格(包括空格、制表符、回車符、換行符等)和特殊字符,
1
string.strip(symbol)
復(fù)制
lstrip()
該方法用于去掉字符串左側(cè)的空格和特殊字符
1
string.lstrip(symbol)
復(fù)制
rstrip()
該方法用于去掉字符串右側(cè)的空格和特殊字符
1
string.rstrip(symbol)
復(fù)制
格式化字符串
格式化字符串是指先制定一個(gè)模版,在這個(gè)模版中預(yù)留幾個(gè)空位,然后再根據(jù)需要填上相應(yīng)的內(nèi)容。這些空位需要通過指定的符號(hào)標(biāo)記(即占位符),而這些符號(hào)還不會(huì)顯示出來。
使用 % 操作符
1
"%[-][+][0][m][.n][symbol]" % strTuple
復(fù)制
這種方式是 Python 早期提供的方法,自從 Python 2.6 開始,字符串提供了 format() 方法對(duì)字符串進(jìn)行格式化(目前比較推薦這種方式進(jìn)行格式化字符串),所以這里就不過多學(xué)習(xí)了。
format() 方法
基本語(yǔ)法如下,
1
stringTemplate.format(args)
復(fù)制
stringTemplate 用于指定字符串的顯示樣式,即模版;args 用于指定替換模版中占位符的實(shí)際內(nèi)容,多個(gè)項(xiàng)之間使用逗號(hào)分隔。
創(chuàng)建模版時(shí),需要使用大括號(hào)和冒號(hào)指定占位符,語(yǔ)法如下,
1
{index:[fill][align][sign][#][width][.precsion][type]}
復(fù)制
其中,type 的類型如下:
列表
由一系列按特定順序排列的元素組成,這些元素的類型可以是 Python 中的任何數(shù)據(jù)類型。列表是 Python 中內(nèi)置的可變序列,在形式上,是將其所有元素放在中括號(hào)([])中,兩個(gè)相鄰的元素使用逗號(hào)(,)分隔。列表中的元素可以是不同的數(shù)據(jù)類型,元素與元素之間互相獨(dú)立,互不干擾。
創(chuàng)建列表
只需要給列表指定一個(gè)標(biāo)識(shí)符,然后將其元素放入其中即可:
1
list = ["hello", "python", 2019, 7, 31]
復(fù)制
當(dāng)然,在實(shí)際編程過程中,我們也可以先創(chuàng)建一個(gè)空列表,然后再需要的時(shí)候,在其中放入元素,
1
list = []
復(fù)制
刪除列表
當(dāng)我們不在需要某個(gè)列表的時(shí)候,只需要使用 del 語(yǔ)句即可刪除:
1
del list
復(fù)制
訪問列表元素
因?yàn)榱斜硪彩切蛄械囊环N,所以也可以使用索引、切片的方式獲取列表中的元素。
操作列表元素
添加元素
可以使用 append() 方法向列表的結(jié)尾處追加一個(gè)元素,
1
list.append(element)
復(fù)制
該方法只能向列表的結(jié)尾處追加元素,如果想要向列表的中間插入一個(gè)元素,可以使用如下方法,
1
list.insert(index, element)
復(fù)制
insert() 方法會(huì)向指定的索引處插入一個(gè)元素,原位置的元素及其以后的元素會(huì)自動(dòng)向后退一位,即其原索引加一。
上面的兩種方法都是想列表中添加一個(gè)單一的元素,如果想要向一個(gè)列表中添加另一個(gè)列表,則可以使用如下方法,
1
list.extend(sequence)
復(fù)制
該方法會(huì)將 sequence 中的元素按原順序依次追加到 list 的結(jié)尾處。
示例代碼:
list = ["hello", "python"]
list.append(2019)
print(list)
list.insert(2, "world")
print(list)
sequ = ["天下", "興亡"]
list.extend(sequ)
print(list)
復(fù)制
修改元素
通過索引定位到要修改的元素,然后直接給其賦值即可,
1
list[index] = newValue
復(fù)制
刪除元素
通過索引刪除
和修改元素相似,定位要?jiǎng)h除的元素的索引,然后使用 del 關(guān)鍵字刪除即可,
1
del list[index]
復(fù)制
根據(jù)元素的值刪除
使用列表的 remove() 方法實(shí)現(xiàn),
1
list.remove(elementValue)
復(fù)制
對(duì)列表進(jìn)行統(tǒng)計(jì)與計(jì)算
獲取某個(gè)元素出現(xiàn)的次數(shù)
使用列表的 count() 方法可以獲取列表中某個(gè)元素的個(gè)數(shù),
1
list.count(element)
復(fù)制
獲取某個(gè)元素首次出現(xiàn)的索引
通過列表的 index() 方法可以獲取指定元素在該列表中第一次出現(xiàn)的索引,
1
list.index(element)
復(fù)制
求純數(shù)字列表中元素的和
如果一個(gè)列表的元素全部是數(shù)字,則可以使用列表的 sum() 方法求其全部元素的和,
1
sum(list, addend)
復(fù)制
其中,addend 為可選參數(shù),默認(rèn)值 0,如果指定則在列表元素之和的基礎(chǔ)上再加上 addend ,如:
list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(sum(list))
print(sum(list, 3))
復(fù)制
列表元素排序
sort() 方法
該方法用于將列表中的元素按指定方式排序,排序后元素的索引將會(huì)改變,
1
list.sort(key=None, reverse=False)
復(fù)制
key 用于指定從每個(gè)元素中提取一個(gè)用于比較的鍵;reverse 默認(rèn)為 False,表示升序排列,如果為 True 則降序排列。
sort() 方法沒有返回值,所以只能對(duì)列表排序后,輸出該列表,
list = ["hello", "Python", "world", "Welcome", "list"]
list.sort()
print(list)
復(fù)制
對(duì)全部元素均為數(shù)字的列表排序很簡(jiǎn)單,如果是對(duì)字符串元素進(jìn)行排序,則先對(duì)大寫字母排序,然后再對(duì)小寫字母進(jìn)行排序。如果想不區(qū)分大小寫排序,需要指定 key 參數(shù)的值,如 key=str.lower 。
而且,需要注意如果一個(gè)列表中的元素既有數(shù)字,又有字符串,則無法使用 sort() 方法進(jìn)行排序。
sorted() 函數(shù)
在 Python 中,提供了一個(gè)內(nèi)置的 sorted() 函數(shù),用于對(duì)列表進(jìn)行排序,該方法返回一個(gè)排序后的列表,而原列表保持不變,
1
new_list = sorted(old_list, key=None, reverse=False)
復(fù)制
其中,參數(shù) key 和 reverse 的作用和 sort() 方法的參數(shù)一樣,例如:
old_list = ["hello", "Python", "world", "Welcome", "list"]
new_list = sorted(old_list, key=str.lower, reverse=True)
print(new_list)
復(fù)制
元組
元組與列表相似,也是有一系列按特定順序排列的元素(可以是 Python 中的任意數(shù)據(jù)類型)組成,但元組是不可變序列,即不能向元組中追加、刪除元素。在形式上,元組的所有元素被放入一對(duì)小括號(hào)中,兩個(gè)相鄰的元素使用逗號(hào)分隔,元素之間沒有任何關(guān)系。由于元組的不可變特性,所以元組一般用于保存程序中不可修改的內(nèi)容。
創(chuàng)建元組
只需要給元組指定一個(gè)標(biāo)識(shí)符,然后在其中填充元素即可,
1
tuple = ("hello", "python", 2019, 7, 31)
復(fù)制
我們也可以創(chuàng)建一個(gè)空元組,
1
tuple = ()
復(fù)制
在 Python 中,元組也不是一定就會(huì)使用小括號(hào)括起來,只要將一組元素使用逗號(hào)分隔開來,Python 就可以視其為元組,
1
tuple = "hello", "python", 2019, 7, 31
復(fù)制
當(dāng)我們使用 print() 函數(shù)打印該元組時(shí),這些元素將會(huì)被小括號(hào)括起來。
如果創(chuàng)建一個(gè)只有一個(gè)元素的元組,則需要在元素后面加一個(gè)逗號(hào),否則該元組將會(huì)被視為一個(gè)字符串,或者其他數(shù)據(jù)類型。
刪除元組
因?yàn)樵M已經(jīng)創(chuàng)建就不可再改變,所有只能刪除元組,而不能刪除其中的元素,
1
del tuple
復(fù)制
訪問元組元素
元素也是一種序列,所以也可以使用索引、切片的方式訪問其中的元素。
元組與列表的區(qū)別
列表屬于可變序列,其元素可以被修改或刪除;而元組不能,只能整體替換
元組比列表的訪問和處理速度快
元組可以作為字典的鍵,而列表不可以
字典
在 Python 中,字典也是可變序列,但是字典沒有索引,而是以 鍵-值 對(duì)的形式存儲(chǔ)數(shù)據(jù)。字典具有一下特征;
通過 鍵 而不是索引來讀取
字典是任意對(duì)象的無需集合
字典是可變的,并且可以任意嵌套
字典的 鍵 必須是唯一的
字典的 鍵 必須不可變
創(chuàng)建字典
定義字典時(shí),每個(gè)元素都包含兩個(gè)部分 鍵 和 值 ,它們之間使用冒號(hào)分隔,組成一個(gè)元素,元素和元素之間使用逗號(hào)分隔,
1
dictionary = {key_1:value_1, key_2:value_2, ..., key_n:value_n}
復(fù)制
元組中每個(gè)元素的 鍵 必須是唯一的、不可變的,可以是數(shù)字、字符串或者元組。元素的 值 可以是 Python 中的任何數(shù)據(jù)類型,且可以不是唯一的。
除了直接創(chuàng)建字典,也可以通過 dict() 和 zip() 函數(shù)將列表、元組組合成一個(gè)字典,
1
dictionary = dict(zip(tuple, list))
復(fù)制
如果 tuple 和 list 的長(zhǎng)度不同,則以短的為基準(zhǔn)創(chuàng)建相同長(zhǎng)度的字典。
刪除字典
刪除字典同樣可以使用 del 關(guān)鍵字,
1
del dictionary
復(fù)制
如果不想刪除字典,而只是想刪除其中的全部元素,則可以使用 clear() 方法,
1
dictionary.clear()
復(fù)制
訪問字典元素
因?yàn)樽值洳幌窳斜?、元組一樣具有索引,所以不能通過索引、切片的方式訪問其元素。字典只能通過 鍵 訪問其對(duì)應(yīng)的 值。
操作字典元素
添加元素
字典同列表一樣是可變序列,所以可以向其中添加元素,只需要指定元素的鍵和值即可,
1
dictionary[key] = value
復(fù)制
只要新加入的 key 在字典中已存在的鍵中不存在即可。
修改元素
修改字典的元素其實(shí)就是變相的添加元素,只需要 key 值在字典中已存在,就會(huì)將其對(duì)應(yīng)的 value 替換成新的值。
刪除元素
刪除字典中的元素同樣可以使用 del 關(guān)鍵字,
1
del dictionary[key]
復(fù)制
將字典元素的 key 刪除,其對(duì)應(yīng)的 value 也會(huì)被刪除,則這個(gè)元素在字典中就不存在了。
集合
Python 中的集合和數(shù)學(xué)中的集合相似,也是用于保存不重復(fù)元素的,有可變集合和不可變集合兩種。在形式上,集合中的元素之間用逗號(hào)分隔,所有元素被放在大括號(hào)中。集合最好的應(yīng)用就是去除重復(fù)元素,因?yàn)榧现械拿總€(gè)元素都是唯一的。
創(chuàng)建集合
直接將所有元素放入括號(hào)中,然后給定一個(gè)標(biāo)識(shí)符即可,
1
set = {element_1, element_2, ..., element_n}
復(fù)制
如果創(chuàng)建集合的時(shí)候,不小心輸入了若干個(gè)重復(fù)的元素,Python 會(huì)自動(dòng)只保留一個(gè)。
我們也可以使用 set() 函數(shù)將列表、元組轉(zhuǎn)換成集合,
1
set = set(list/tuple)
復(fù)制
如果我們想創(chuàng)建一個(gè)空集合,也只能使用 set() 方法,而不使用空的大括號(hào)(因?yàn)榭盏拇罄ㄌ?hào)表示一個(gè)空字典)。
刪除集合
集合同樣可以使用 del 關(guān)鍵字刪除,
1
del set
復(fù)制
操作結(jié)合
添加元素
可以使用 add() 方法向集合中添加元素,
1
set.add(element)
復(fù)制
刪除元素
可以使用 pop() 或 remove() 方法刪除集合中的元素,或者使用 clear() 方法清空集合中的元素,
1
set.pop()
復(fù)制
pop() 方法會(huì)按順序刪除集合中的第一個(gè)元素。
1
set.remove(element)
復(fù)制
remove() 方法需要指定要?jiǎng)h除的元素,如果該元素不存在,則拋出異常。
1
set.clear()
復(fù)制
clear() 方法會(huì)刪除集合中的所有元素,使其變?yōu)橐粋€(gè)空集合。
集合運(yùn)算
交集
在 Python 中,求集合的交集使用 & 符號(hào)進(jìn)行運(yùn)算。
并集
在 Python 中,求集合的并集使用 | 符號(hào)進(jìn)行運(yùn)算。
差集
在 Python 中,求集合的差集使用 - 符號(hào)進(jìn)行運(yùn)算。
對(duì)稱差集
在 Python 中,求集合的對(duì)稱差集使用 ^ 符號(hào)進(jìn)行運(yùn)算。
例如,
1
2
3
4
5
6
7
set_1 = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
set_2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print(set_1 & set_2)
print(set_1 | set_2)
print(set_1 - set_2)
print(set_1 ^ set_2)