本文將提供
列表
的所有深度
概念,
作為資料結構的一部分。這些概念將從基礎到高階,以瞭解列表的內幕。
介紹
我們想到的第一個問題是
什麼是清單?
以下幾點將使您理解如下所示的列表:
該列表可能是也可能不是異構資料型別的集合。
對於小序列很有用。
該列表在python中是不可變的,這意味著我們可以對其列表中的項進行修改。專案是列表中的元素。
該列表無法進行直接算術,並且需要更多的記憶體來進行操作。
列表中的Python示例:
用方括號[]在python中建立列表。
#Empty listlist1 = []#僅用整數元素填充列表list1 = [1,2,3,4,5]#僅包含字串元素的填充列表list1 = [‘Amit’, ‘Akaash’, ‘John’, ‘Smith’]#僅包含浮點元素的填充列表list1 = [1。4, 4。2, 9。7, 5。5]#具有混合元素list1 = [1, ‘Amit’, 4。2, ‘Smith’]
讓我們看看列表的地址和列表中的元素。
#列表的地址print(id(list1))#輸出:85505992#列表中元素的地址print(id(list1[0]))print(id(list1[1]))print(id(list1[2]))print(id(list1[3]))print(id(list1[4]))#輸出:87915237671208791523767152879152376718487915237672168791523767248
上面的示例顯示完整列表的地址和每個元素的地址是不同的。
大O基礎
藉助如下所示的
“ LIST”
示例,有助於瞭解資料結構中的Big O :
資料結構中使用Big O項來了解演算法中的時間和空間約束。
#帶有一個用於迴圈def squared(nums): sq_list = [] for n in nums: sq_list。append(n*n) return sq_listnums = [1,2,3,4,5]output = squared(nums)print(output)#output:[1, 4, 9, 16, 25]
如我們所見,列表中有5個元素,並且for迴圈將迭代5次,但是如果列表中有100K個元素,則for迴圈將迭代100K次,並且時間消耗將更多。因此,該程式的時間複雜度為O(n)的數量級。
另一方面,當我們將列表傳遞給函式以獲取值時
def sum_value(nums, nums1, value): price = nums[index]/nums1[index] return price
在這裡,時間複雜度為O(1)的順序,因為計算獨立於列表。
如果我們使用兩個for迴圈比較程式中的數字怎麼辦。
for n in range(len(nums)): ————> n for k in range(len(nums1)): ————> n if nums[n] == nums1[k]:
在這裡,時間是(時間= a *n²+ b),時間複雜度是O(n²)的數量級。我們始終僅選擇最快的增長時間,例如以下示例:
a*n^2 + b*n + c ————-> n^2a*n^3 + b*n^2 + c*n + d ————-> n^3
列表中使用的方法
該列表是不可變的,我們可以根據要求進行修改。因此,python提供了一些修改方法來對列表進行更改,如下所示:
例如:
追加方法:
將值新增到列表的最後
nums = [12,24,46,85,23,89]nums。append(15)print(nums)#output:[12, 24, 46, 85, 23, 89, 15]
2。
插入方法:
將元素新增到方法中指定的特定索引處。
nums = [12,24,46,85,23,89]nums。insert(2,15)print(nums)#output:[12, 24, 15, 46, 85, 23, 89]
3。
刪除方法:
如果我們知道元素在列表中,則刪除該元素。
nums = [12,24,46,85,23,89]nums。remove(46)print(nums)#output:[12, 24, 85, 23, 89]#如果該元素不在列表中,則會出現錯誤#輸出:ValueError: list。remove(x): x not in list
4。
彈出方法:
要刪除帶有索引的數字,它將刪除最後一個元素而不給出索引
nums = [12,24,46,85,23,89] nums。pop()print(nums)#output:刪除了最後一個元素89 [ 12、24、46、85、23 ]#with index select nums = [12,24,46,85,23,89] nums。pop(2)print(nums)#輸出:已刪除46 [ 12,24,85,23,89 ]
5。
擴充套件方法:
用另一個列表擴充套件列表。
nums = [12,24,46,85,23,89] nums。extend([34,77])print(nums)#output:[ 12,24,46,85,23,89,34,77 ]
還有許多其他方法,使您可以搜尋和學習它們。
列表中使用的內建功能
還有一些內建函式可以輕鬆進行計算。
例如:
nums = [12,24,46,85,23,89]#查詢最小值print(min(nums))#output:12——————————————————————————#查詢最大值print(max(nums))#output:89——————————————————————————#查詢所有值的print(sum(nums))#output:279——————————————————————————#將值升序排列nums。sort()print(nums)#output:[12, 23, 24, 46, 85, 89]
清單理解
列表理解用於使過程更簡潔,更快速。
例如:
#為範圍(5)中的x建立元素sum = []for x in range(5): sum。append(x+2)print(sum)#output:[2, 3, 4, 5, 6]
為了簡潔起見,我們可以將
lambda
函式與
map
方法一起使用
sum = list(map(lambda x: x+2, range(5)))print(sum)#output:[2, 3, 4, 5, 6]
我們也可以在沒有lambda函式和map方法的情況下實現相同的輸出。
sum = [x+2 for x in range(5)]print(sum)#output:[2, 3, 4, 5, 6]
哦!列表理解的魔力非常有趣。
使用兩個for迴圈的另一個示例
pairs = []for x in [4,7,2]: for y in [7,3,8]: if x != y: pairs。append((x, y)) print(pairs)#output:[(4, 7), (4, 3), (4, 8), (7, 3), (7, 8), (2, 7), (2, 3), (2, 8)]
等效的簡潔和易懂的理解如下所示:
pairs = [(x, y) for x in [4,7,2] for y in [7,3,8] if x != y]print(pairs)#output:[(4, 7), (4, 3), (4, 8), (7, 3), (7, 8), (2, 7), (2, 3), (2, 8)]
列表理解的更多示例
nums = [7,3,8,1,2][x*2 for x in nums]#output:[14, 6, 16, 2, 4]————————————————————————-#2nums = [7,3,8,1,2][x for x in nums if x >= 5]#output:[7, 8]————————————————————————-#To flatten the list from listslists = [[1,2,3], [4,7,2], [7,3,8]][num for elem in lists for num in elem]#output:[1, 2, 3, 4, 7, 2, 7, 3, 8]
我們可以對矩陣使用理解,也可以對矩陣進行轉置
import numpy as npinput_1 = np。array([[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34]])[[row[i] for row in input_1] for i in range(4)]#output:[[11, 21, 31], [12, 22, 32], [13, 23, 33], [14, 24, 34]]
我們還可以使用內建的ZIP函式對矩陣進行轉置。
import numpy as npinput_1 = np。array([[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34]])list(zip(*input_1))#output:[(11, 21, 31), (12, 22, 32), (13, 23, 33), (14, 24, 34)]
結論:
列表理解是處理列表和其他序列操作以節省時間和空間計算的一種聰明方法。