python 序列類型list示例詳解
列表定義
列表(List)是一種有序的集合,可以包含任意類型的對(duì)象:數(shù)字、字符串甚至其他列表等。列表是可變的,這意味著我們可以添加、刪除或更改列表中的元素。
列表 list 構(gòu)建
list 構(gòu)建方法
使用一對(duì)方括號(hào)來表示空列表: []
使用方括號(hào),其中的項(xiàng)以逗號(hào)分隔: [a], [a, b, c]
使用列表推導(dǎo)式: [x for x in iterable]
使用類型的構(gòu)造器: list() 或 list(iterable)
示例
# 創(chuàng)建一個(gè)空列表 my_list = [] # 創(chuàng)建一個(gè)包含整數(shù)的列表 number_list = [1, 2, 3, 4, 5] # 創(chuàng)建一個(gè)包含字符串的列表 string_list = ["apple", "banana", "orange"] # 創(chuàng)建一個(gè)包含不同類型元素的列表 mixed_list = [1, "hello", True, 3.14 , [1, 2, 3]]
列表索引訪問
索引說明
使用append(object)方法在列表末尾添加一個(gè)元素,返回None。返回None就意味著沒有新的列表產(chǎn)生,就地修改。時(shí)間復(fù)雜度是O(1)。因?yàn)樗皇窃诹斜淼哪┪蔡砑右粋€(gè)元素,不會(huì)受到列表長度的影響。
使用insert(index, object)方法在指定位置添加一個(gè)元素,返回None。返回None就意味著沒有新的列表產(chǎn)生,就地修改。時(shí)間復(fù)雜度是O(n)。其中n是列表的長度。因?yàn)樵诓迦朐睾?,后面的元素需要向后移?dòng)以騰出空間。
使用extend(iteratable) 方法,將可迭代對(duì)象的元素追加進(jìn)來,返回None。可以將一個(gè)列表中的元素逐個(gè)添加到另一個(gè)列表的末尾。就地修改。時(shí)間復(fù)雜度為O(k),其中k是要添加到列表的元素?cái)?shù)量。由于它需要逐個(gè)添加元素,時(shí)間復(fù)雜度取決于要添加的元素?cái)?shù)量。
使用加號(hào)(+)運(yùn)算符,連接操作,將兩個(gè)列表連接起來。產(chǎn)生新的列表,原列表不變。本質(zhì)上調(diào)用的是__add__()方法。時(shí)間復(fù)雜度為O(m+n),其中m和n分別是兩個(gè)列表的長度。因?yàn)樗枰獎(jiǎng)?chuàng)建一個(gè)新的列表,并將原列表的元素逐個(gè)復(fù)制到新列表中。
使用列表解析,可以使用列表解析來添加元素到列表中。通常為O(n),其中n是生成的新列表的長度。
示例
my_list = ['apple', 'banana', 'cherry', 'date'] # 使用正數(shù)索引獲取第二個(gè)元素 print(my_list[1]) # 輸出: banana # 使用負(fù)數(shù)索引獲取倒數(shù)第二個(gè)元素 print(my_list[-2]) # 輸出: cherry
列表元素修改
可以通過索引直接修改列表中的元素。
示例
my_list = ['apple', 'banana', 'cherry', 'date'] # 修改列表中的第一個(gè)元素 my_list[0] = 'apricot' print(my_list) # 輸出: ['apricot', 'banana', 'cherry', 'date']
列表添加元素
使用append(object)方法在列表末尾添加一個(gè)元素,返回None。返回None就意味著沒有新的列表產(chǎn)生,就地修改。時(shí)間復(fù)雜度是O(1)。因?yàn)樗皇窃诹斜淼哪┪蔡砑右粋€(gè)元素,不會(huì)受到列表長度的影響。
使用insert(index, object)方法在指定位置添加一個(gè)元素,返回None。返回None就意味著沒有新的列表產(chǎn)生,就地修改。時(shí)間復(fù)雜度是O(n)。其中n是列表的長度。因?yàn)樵诓迦朐睾?,后面的元素需要向后移?dòng)以騰出空間。
使用extend(iteratable) 方法,將可迭代對(duì)象的元素追加進(jìn)來,返回None??梢詫⒁粋€(gè)列表中的元素逐個(gè)添加到另一個(gè)列表的末尾。就地修改。時(shí)間復(fù)雜度為O(k),其中k是要添加到列表的元素?cái)?shù)量。由于它需要逐個(gè)添加元素,時(shí)間復(fù)雜度取決于要添加的元素?cái)?shù)量。
使用加號(hào)(+)運(yùn)算符,連接操作,將兩個(gè)列表連接起來。產(chǎn)生新的列表,原列表不變。本質(zhì)上調(diào)用的是__add__()方法。時(shí)間復(fù)雜度為O(m+n),其中m和n分別是兩個(gè)列表的長度。因?yàn)樗枰獎(jiǎng)?chuàng)建一個(gè)新的列表,并將原列表的元素逐個(gè)復(fù)制到新列表中。
使用列表解析,可以使用列表解析來添加元素到列表中。通常為O(n),其中n是生成的新列表的長度。
示例
my_list = [1, 20, 3] my_list.append(4) print(my_list) # 輸出 [1, 20, 3, 4] my_list.insert(1, 15) print(my_list) # 輸出 [1, 15, 20, 3, 4] list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1) # 輸出:[1, 2, 3, 4, 5, 6] list1 = [1, 2, 3] list2 = [4, 5, 6] concatenated_list = list1 + list2 print(concatenated_list) # 輸出:[1, 2, 3, 4, 5, 6] my_list = [x for x in range(5)] print(my_list) # 輸出:[0, 1, 2, 3, 4]
列表元素重復(fù)次數(shù)
在Python中,使用乘號(hào)*可以將列表中的元素重復(fù)指定次數(shù)。這種操作會(huì)復(fù)制列表中的元素,然后按照指定次數(shù)進(jìn)行重復(fù)。對(duì)于列表乘法操作,時(shí)間復(fù)雜度取決于乘法操作符左側(cè)列表的長度和乘數(shù)。因此,如果原始列表長度為n,重復(fù)次數(shù)為m,則列表乘法的時(shí)間復(fù)雜度為O(n * m)。
修改重復(fù)后的列表不會(huì)影響原始列表。例如,對(duì)重復(fù)列表進(jìn)行修改不會(huì)改變?cè)剂斜碇械脑亍?/p>
乘法操作符只是復(fù)制列表中的引用,而不是復(fù)制對(duì)象本身。如果列表中的元素是可變對(duì)象(如列表或字典),修改其中一個(gè)列表的元素也會(huì)影響到另一個(gè)列表。這種淺拷貝行為可能會(huì)導(dǎo)致意外結(jié)果。
示例
my_list = [1, 2, 3] repeated_list = my_list * 3 print(repeated_list) # 輸出:[1, 2, 3, 1, 2, 3, 1, 2, 3] repeated_list = my_list * 3 repeated_list[0] = 5 print(repeated_list) # 輸出:[5, 2, 3, 5, 2, 3, 5, 2, 3] print(my_list) # 輸出:[1, 2, 3]
my_list = [[1, 2], [3, 4]] repeated_list = my_list * 2 repeated_list[0][0] = 5 print(repeated_list) # 輸出:[[5, 2], [3, 4], [5, 2], [3, 4]] print(my_list) # 輸出:[[5, 2], [3, 4]]
列表合并
使用加號(hào)操作符 (+)
這種方法最直觀,適用于少量列表的快速合并。
list1 = [1, 2, 3] list2 = [4, 5, 6] merged_list = list1 + list2 print(merged_list) # 輸出: [1, 2, 3, 4, 5, 6]
使用 extend() 方法
原地(in-place)修改列表,可以使用 extend() 方法,它會(huì)將一個(gè)列表的所有元素添加到另一個(gè)列表的末尾。
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1) # 輸出: [1, 2, 3, 4, 5, 6]
使用列表推導(dǎo)式
需要在合并時(shí)對(duì)元素進(jìn)行某些操作時(shí),可以使用列表推導(dǎo)式來連接列表。
list1 = [1, 2, 3] list2 = [4, 5, 6] merged_list = [item for sublist in [list1, list2] for item in sublist] print(merged_list) # 輸出: [1, 2, 3, 4, 5, 6]
使用 itertools.chain()
itertools.chain() 方法可以用于更高效地合并大量列表,它返回一個(gè)迭代器。這個(gè)方法在處理大量數(shù)據(jù)時(shí)很有幫助,因?yàn)樗粫?huì)立即創(chuàng)建一個(gè)新列表,而是通過迭代器按需生成元素。
import itertools list1 = [1, 2, 3] list2 = [4, 5, 6] merged_list = list(itertools.chain(list1, list2)) print(merged_list) # 輸出: [1, 2, 3, 4, 5, 6]
使用星號(hào)操作符 (*)
這種方式不僅可以用于列表合并,還可以用于合并元組、集合等可迭代對(duì)象,提供很好的靈活性和可讀性。
list1 = [1, 2, 3] list2 = [4, 5, 6] merged_list = [*list1, *list2] print(merged_list) # 輸出: [1, 2, 3, 4, 5, 6]
列表刪除元素
使用del語句通過索引刪除元素。
使用pop([index])方法刪除元素。不指定索引index,就從列表尾部彈出一個(gè)元素。指定索引index,就從索引處彈出一個(gè)元素,索引超界拋出IndexError錯(cuò)誤。
使用remove(value)方法從左至右查找第一個(gè)匹配value的值,移除該元素,返回None。就地修改。
使用clear()方法刪除所有元素。清除列表所有元素,剩下一個(gè)空列表。
my_list = [1, 15, 20, 3, 4] del my_list[1] print(my_list) # 輸出 [1, 20, 3, 4] popped_item = my_list.pop(2) print(popped_item) # 輸出 3 print(my_list) # 輸出 [1, 20, 4] my_list.remove(20) print(my_list) # 輸出 [1, 4] my_list.clear() print(my_list) # 輸出 []
列表切片
切片(slice):切片允許你獲取列表中的一個(gè)子集。切片使用起始索引和結(jié)束索引來指定要提取的元素范圍,但不包括結(jié)束索引所指向的元素。你可以使用list[start:end]的形式來獲取從start到end-1索引范圍內(nèi)的元素。如果省略起始索引,Python會(huì)從列表的開頭開始。如果省略結(jié)束索引,Python會(huì)一直取到列表末尾。
my_list = ['apple', 'banana', 'cherry', 'date'] # 使用切片獲取列表中的前兩個(gè)元素 print(my_list[:2]) # 輸出: ['apple', 'banana'] # 使用切片獲取列表中的最后兩個(gè)元素 print(my_list[-2:]) # 輸出: ['cherry', 'date'] # 使用切片獲取列表中的第二個(gè)到倒數(shù)第二個(gè)元素 print(my_list[1:-1])# 輸出: ['banana', 'cherry'] # 使用步長為2獲取列表中的奇數(shù)索引元素 print(my_list[::2]) # 輸出: ['apple', 'cherry'] # 使用步長為2獲取列表中的偶數(shù)索引元素 print(my_list[1::2]) # 輸出: ['banana', 'date'] # 使用負(fù)步長翻轉(zhuǎn)列表 print(my_list[::-1]) # 輸出: ['date', 'cherry', 'banana', 'apple']
列表循環(huán)
for item in my_list: print(item)
列表推導(dǎo)式
squares = [x**2 for x in range(10)] print(squares) # 輸出 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
列表復(fù)制
復(fù)制列表主要有兩種方式:淺拷貝(Shallow Copy)和深拷貝(Deep Copy)。
淺拷貝的方法:直接賦值、列表的copy()方法、切片操作符[:]、或者list()構(gòu)造函數(shù)。
深拷貝的方法:copy模塊中的deepcopy()函數(shù)
示例
original_list = [1, 2, [3, 4]] shallow_copied_list = original_list print(original_list == shallow_copied_list) # 輸出 True # 修改淺拷貝后的列表 shallow_copied_list[0] = 5 shallow_copied_list[2][0] = 6 print(original_list) # 輸出 [1, 2, [6, 4]] print(shallow_copied_list) # 輸出 [5, 2, [6, 4]]
import copy original_list = [1, 2, [3, 4]] deep_copied_list = copy.deepcopy(original_list) print(original_list == deep_copied_list) # 輸出 True # 修改深復(fù)制后的列表 deep_copied_list[0] = 5 deep_copied_list[2][0] = 6 print(original_list) # 輸出 [1, 2, [3, 4]] print(deep_copied_list) # 輸出 [5, 2, [6, 4]]
列表查詢
列表查詢通常指的是查找特定元素在列表中的索引或值。常見的列表查詢方法包括使用index()方法或者遍歷整個(gè)列表進(jìn)行查找。使用count()方法用于計(jì)算列表中某個(gè)元素出現(xiàn)的次數(shù)。
index(value,[start,[stop]])
使用index()方法可以查找指定元素在列表中的索引。
這種方法的時(shí)間復(fù)雜度為O(n),其中n為列表的長度。在最壞情況下,需要遍歷整個(gè)列表才能找到目標(biāo)元素,因此時(shí)間復(fù)雜度為O(n)。
my_list = [1, 2, 3, 4, 5] index = my_list.index(3) print(index) # 輸出:2
count(value)
列表查詢中的count()方法用于計(jì)算列表中某個(gè)元素出現(xiàn)的次數(shù)。這個(gè)方法會(huì)遍歷整個(gè)列表,并統(tǒng)計(jì)指定元素出現(xiàn)的次數(shù)。
count()方法的時(shí)間復(fù)雜度也為O(n),其中n為列表的長度。因?yàn)樵摲椒ㄐ枰闅v整個(gè)列表來統(tǒng)計(jì)指定元素的數(shù)量,所以在最壞的情況下,需要對(duì)列表中的每個(gè)元素進(jìn)行比較。
my_list = [1, 2, 2, 3, 3, 3] count = my_list.count(3) print(count) # 輸出:3
列表反轉(zhuǎn)
可以使用reverse()方法對(duì)列表進(jìn)行反轉(zhuǎn)。將列表元素反轉(zhuǎn),返回None。就地修改。
示例
my_list = [1, 2, 3, 4, 5] my_list.reverse() print(my_list) # 輸出:[5, 4, 3, 2, 1]
列表排序
使用sort(key=None, reverse=False)方法可以對(duì)列表進(jìn)行排序,就地修改,默認(rèn)是升序排列??梢酝ㄟ^傳遞reverse=True參數(shù)進(jìn)行降序排序。key一個(gè)函數(shù),指定key如何排序。
對(duì)于包含字符串的列表,排序默認(rèn)按照字母順序排序,可以通過key參數(shù)傳遞自定義的排序函數(shù)。
如果想要在不改變?cè)剂斜淼那闆r下返回一個(gè)新的有序列表,可以使用sorted()函數(shù)。
示例
my_list = [3, 1, 4, 1, 5, 9, 2, 6] my_list.sort() print(my_list) # 輸出:[1, 1, 2, 3, 4, 5, 6, 9] my_list.sort(reverse=True) print(my_list) # 輸出:[9, 6, 5, 4, 3, 2, 1, 1] str_list = ['apple', 'banana', 'orange', 'grape'] str_list.sort(key=len) # 按照字符串長度排序 print(str_list) # 輸出:['apple', 'grape', 'banana', 'orange']
my_list = [3, 1, 4, 1, 5, 9, 2, 6] sorted_list = sorted(my_list) print(my_list) # 輸出:[3, 1, 4, 1, 5, 9, 2, 6] print(sorted_list) # 輸出:[1, 1, 2, 3, 4, 5, 6, 9]
列表的其它操作
運(yùn)算 | 結(jié)果: | 備注 |
---|---|---|
| 如果 s 中的某項(xiàng)等于 x 則結(jié)果為 | |
| 如果 s 中的某項(xiàng)等于 x 則結(jié)果為 | |
| s 與 t 相拼接 | |
| 相當(dāng)于 s 與自身進(jìn)行 n 次拼接 | |
| s 的第 i 項(xiàng),起始為 0 | |
| s 從 i 到 j 的切片 | |
| s 從 i 到 j 步長為 k 的切片 | |
| s 的長度 | |
| s 的最小項(xiàng) | |
| s 的最大項(xiàng) | |
| x 在 s 中首次出現(xiàn)項(xiàng)的索引號(hào)(索引號(hào)在 i 或其后且在 j 之前) | (8) |
| x 在 s 中出現(xiàn)的總次數(shù) |
| 將 s 的第 i 項(xiàng)替換為 x | |
| 將 s 從 i 到 j 的切片替換為可迭代對(duì)象 t 的內(nèi)容 | |
| 等同于 | |
| 將 | |
| 從列表中移除 | |
| 將 x 添加到序列的末尾 (等同于 | |
| 從 s 中移除所有項(xiàng) (等同于 | |
| 創(chuàng)建 s 的淺拷貝 (等同于 | |
| 用 t 的內(nèi)容擴(kuò)展 s (基本上等同于 | |
| 使用 s 的內(nèi)容重復(fù) n 次來對(duì)其進(jìn)行更新 | |
| 在由 i 給出的索引位置將 x 插入 s (等同于 | |
| 提取在 i 位置上的項(xiàng),并將其從 s 中移除 | |
| 刪除 s 中第一個(gè) | |
| 就地將列表中的元素逆序。 |
常用方法
append(): 添加一個(gè)元素到列表的末尾。
extend(): 擴(kuò)展列表,添加多個(gè)元素到末尾。
insert(): 在指定位置插入一個(gè)元素。
remove(): 刪除列表中的一個(gè)元素。
pop(): 刪除并返回列表中的一個(gè)元素。
clear(): 清空列表。
index(): 返回列表中第一個(gè)匹配元素的索引。
count(): 返回列表中匹配元素的數(shù)量。
sort(): 對(duì)列表進(jìn)行排序。
reverse(): 反轉(zhuǎn)列表。
參考文檔
https://docs.python.org/zh-cn/3.12/library/stdtypes.html#/list
到此這篇關(guān)于python 序列類型list示例詳解的文章就介紹到這了,更多相關(guān)python 序列類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
理解Django 中Call Stack機(jī)制的小Demo
這篇文章主要介紹了理解Django 中Call Stack 機(jī)制的小Demo,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式
今天小編就為大家分享一篇dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01python實(shí)現(xiàn)差分隱私Laplace機(jī)制詳解
今天小編就為大家分享一篇python實(shí)現(xiàn)差分隱私Laplace機(jī)制詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11python 刪除excel表格重復(fù)行,數(shù)據(jù)預(yù)處理操作
這篇文章主要介紹了python 刪除excel表格重復(fù)行,數(shù)據(jù)預(yù)處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07PyQt5入門之基于QListWidget版本實(shí)現(xiàn)圖片縮略圖列表功能
這篇文章主要介紹了PyQt5入門之基于QListWidget版本實(shí)現(xiàn)圖片縮略圖列表功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09