列表list(索引快,增刪慢)
乙個由若干有序元素組成的線性的可變的資料結構叫列表;
(1)列表使用中括號 [ ] 表示;
(2)列表內元素是有順序的,可以索引;
(3)列表是線性的資料結構;
(4)列表是可變的;
鍊錶(增刪快,索引慢)
鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 相比於線性表順序結構,操作。
列表與鍊錶的區別:
(1)列表開闢的記憶體空間是一塊連續的記憶體,他是連續儲存的;而鍊錶在記憶體中是非連續,非順序的儲存結構;
(2)列表索引快,增刪操作慢;鍊錶索引慢,增刪操作快;
佇列queue
佇列是一種特殊的線性表,是一種先進先出(fifo)的資料結構。它只允許在 表的前端(front)進行刪除操作 ,而在 表的後端(rear)進行插入操作 。
棧stack
棧(stack)僅在 表尾進行插入或刪除操作 的線性表。棧是一種資料結構,它按照後進先出的原則儲存資料;
佇列queue和棧stack的區別:
(1)佇列先進先出(無底的管道);棧先進後出(有底的管道);
(2)佇列只能在表頭進行刪除操作,表尾進行插入操作;棧是只能在表尾進行插入和刪除操作;
(3)佇列遍歷資料比棧快;
1、列表的定義:
list( [iterable] ) 或 lst = [ ]
注意:列表不能一開始就定義大小;
2、列表的索引訪問:
list[ index ],index就是索引,使用中括號訪問;
注意:索引不能越界否則會報indexerror錯誤;
3、列表的查詢:
index( value,[start,[stop] ] )
(1)通過值value,從指定區間查詢列表內的元素是否匹配;
(2) 匹配到第乙個就立即返回索引,不在匹配之後的元素;
(3)匹配不到,丟擲valueerror錯誤;
count(value):返回列表中匹配value的次數;
len():返回列表元素的個數;
時間複雜度:
index 和 count 方法都是o(n),隨著列表資料規模的增大,而效率下降;所以為了程式的效率少使用 index 和 count 方法;
4、列表元素的修改
索引訪問修改:
list[ index ] = value
注意:索引不要越界;
5、列表增加、插入元素
(1)列表尾部追加元素,返回none(返回none意味這沒有產生新的列表,在原列表上就地修改)
(2)時間複雜度:o(1)
insert( index,object ) → none
(1)在指定索引index處插入元素object,返回none(返回none意味這沒有產生新的列表,在原列表上就地修改)
(2)時間複雜度:o(n)
(3)索引可以越界嗎?
索引超上界,尾部追加;
索引超下界,頭部追加;
extend( iteratable ) → none
(1)將可迭代物件的元素追加進來,返回none(返回none意味這沒有產生新的列表,在原列表上就地修改)
+ → list
(1)連線操作,將兩個列表連線起來,產生新的列表,原列表不變;
(2)本質上呼叫的是 _add_() 方法;
* → list
(1)重複操作,將本列表元素重複 n 次,返回新的列表,原列表不變;
6、列表刪除元素
remove( value ) → none
(1)從左至右查詢第乙個匹配value的值,移除該元素,返回none(返回none意味這沒有產生新的列表,在原列表上就地修改)
(2)時間複雜度:o(n) 效率低
pop( [ index ] ) → item
(1)不指定索引index,就從列表尾部彈出乙個元素;
(2)指定索引index,就從索引處彈出乙個元素,索引越界丟擲indexerror錯誤;
(3)時間複雜度:不指定index時:o(1) 、 指定index時:o(n)【指定index時,刪除索引處元素,索引後方的元素前移索引效率低】
clear() → none
(1)清除列表所有元素,剩下乙個空列表;
7、列表的其他操作
reverse() → none
(1)將列表元素反轉,返回none(返回none意味這沒有產生新的列表,在原列表上就地修改)
sort(key=none,reverse=false) → none
(1)對列表元素進行排序,就地修改,預設公升序;
(2)reverse為true,反轉,降序;
(3)key乙個函式,指定key如何排序;
eg:lst.sort(key = functionname)
ineg:[3 , 4] in [1,2,[3,4]]
for x in [1,2,3,4]
8、列表複製
copy() → list
(1)copy後返回乙個新列表;
(2)注意淺拷貝,深拷貝概念;
深拷貝:copy模組提供了deepcopy;
eg:import copy
lst0 = [1,[2,3,4],5]
lst5 = copy.deepcopy(lst0)
lst5[1][1] = 20
lst5 == lst0#false
9、隨機數
random模組
(1)randint( a,b ):返回 [ a,b ] 之間的整數;【注意a,b此時是前包後包的】
(2)choice( seq ):從非空序列的元素中隨機挑選乙個元素;eg:random.choice( range(10) ),從0到9中隨機挑選乙個整數。random.choice( [1,3,5,7] )
(3)randrange( [start,] stop [,step] ):從指定範圍內,按指定基數遞增的集合中獲取乙個隨機數,基數預設值為1。eg:random.randrange(1,7,2):【 [1,7,2) 】
(4)random.shuffle(list) → none 就地打亂列表元素
(5)sample(population,k) → list:從樣本空間或總體(序列或者集合型別)中隨機取出k個不同的元素,返回乙個新列表;
Python資料結構 list
list 和c語言中的陣列比較相似 可以通過下標進行訪問與修改 建立乙個list變數 len shoplist 求出list中的元素個數 shoplist 0 訪問第乙個元素 shoplist 0 carrot 修改第乙個元素在list中存放的資料型別可以為一種或幾種資料型別,list中也可以巢狀l...
python內建資料結構 List
內建資料結構分類 型別種類 數值型int float complex bool 序列物件 str list tuple 鍵值對set dict 數字的處理函式 名稱作用 名稱作用 round 四捨六入五取偶 min 取最小值 floor 向下取整 max 取最大值 ceil 向上取整 pow x,y...
資料結構 list
實現單鏈表的資料插入和刪除。include include typedef struct listlist void print list list head void insert list list head,int d void delete list list head,int d else...