透過Python示例將列表理解為Big O和Comprehension

透過Python示例將列表理解為Big O和Comprehension

本文將提供

列表

的所有深度

概念,

作為資料結構的一部分。這些概念將從基礎到高階,以瞭解列表的內幕。

介紹

我們想到的第一個問題是

什麼是清單?

以下幾點將使您理解如下所示的列表:

該列表可能是也可能不是異構資料型別的集合。

對於小序列很有用。

該列表在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

透過Python示例將列表理解為Big O和Comprehension

上面的示例顯示完整列表的地址和每個元素的地址是不同的。

大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)]

結論:

列表理解是處理列表和其他序列操作以節省時間和空間計算的一​種聰明方法。