Python基礎-列表及列表解析小結

wklken發表於2015-12-28

列表及列表解析

發現要到2013了,這兩個月,離職入職,忙七忙八的,博文少了好多,筆記到是一大堆。
最近開始整理書籤,微博收藏以及筆記梳理
採用刪的方式,就是在evernote中新建一片,然後撈對應的筆記,一點點總結梳理,刪除原有的筆記,發現這樣效率高些(原來是在原有筆記之上直接修改總結,發現有用的資訊其實並不多,效率有點低)

相對而言比較全和有用,會持續優化。

2013,發完這個系列的部落格之後,將會整個部落格遷移到自己的部落格(剛開始寫…),後續將同步吧,不過csdn可能會慢一些,自己blog會更自由些。後續將會是python&框架,linux後臺開發,Go等等其他。

不扯了,看正題
以下是對列表筆記梳理的第一個版本,僅供參考

資料來源於書籍,網路,個人練習等等


定義:

列表是Python中使用最頻繁的資料型別【可以說沒有之一】

關鍵詞:有序,可變

檢視幫助 : help(list)

常見的列表操作

宣告&建立

內建函式list(a_sequence) 可以將一個序列轉為列表

通過下標訪問

增加元素

A.新加入一個元素append

append方法新增。它在原列表末尾新增一個 item, item型別可以是任意的

B.插入一個元素insert

C.兩個列表相加
兩種方式
第一種

第二種(必須接收一個引數,且是另一個列表)

等價的做法

梳理:

s.append(x)

same as s[len(s):len(s)] = [x] 在列表尾部追加單個物件x。使用多個引數會引起異常。

s.extend(x)

same as s[len(s):len(s)] = x將列表L中的表項新增到列表中。返回None。

s.insert(i, x)

same as s[i:i] = [x] 在索引為i的元素前插入物件x。如list.insert(0,x)在第一項前插入物件。返回None。

刪除元素

A.按item的索引或切片刪除

B.按item的值進行刪除

若是remove對應值查無,將跑ValueError

C.刪除某個位置並返回該位置值

pop若是不傳位置引數,預設刪除列表最後一個元素

梳理:

s.pop([i])

same as x = s[i]; del s[i]; return x刪除列表中索引為x的表項,並返回該表項的值。若未指定索引,pop返回列表最後一項。

s.remove(x)

same as del s[s.index(x)] 刪除列表中匹配物件x的第一個元素。匹配元素時產生異常。返回None。

del s[i:j]

same as s[i:j] = []

修改元素

對指定索引進行賦值操作

A.某個元素

B.某一段元素

梳理:

s[i] = x

item i of s is replaced by x

s[i:j] = t

slice of s from i to j is replaced by the contents of the iterable t

5.切片和索引

A.索引l[i]

B.切片l[i:j:k]
i,j,k可選,冒號必須的 i不指定預設0,j不指定預設序列尾,k不指定預設1

排序

A.原地排list.sort()

sort可接受引數

列表的比較操作 , 隱式呼叫cmp 方法 , 比較規則是逐個掃描元素 , 進行比較, 如果可以比較 , 比較, 如果相等掃描下一個元素 , 如果不相等返回結果 , 如果兩個元素型別不可以比較 , 就比較兩個物件的 id()值 .. 如果一直相等 ,直到一個列表掃描結束 , 那麼返回較長的列表較大

B.sorted函式

sorted(l1) #返回l1的有序序列,l1不變

C.反序

同樣

l[::-1]可以達到一樣的效果,但是這個是返回一個新的列表

梳理:

sort sorted 區別

s.reverse()

reverses the items of s in place顛倒列表元素的順序。

s.sort([cmp[, key[, reverse]]])

sort the items of s in place對列表排序,返回none。bisect模組可用於排序列表項的新增和刪除。

查詢和統計

A.包含判斷in ,not in

B.查詢位置索引index

C.統計一個元素的出現次數

梳理:

s.count(x)

return number of i’s for which s[i] == x返回物件x在列表中出現的次數。

s.index(x[, i[, j]])

return smallest k such that s[k] == x and i <= k < j返回列表中匹配物件x的第一個列表項的索引。無匹配元素時產生異常。

遍歷列表

A.直接

B.需要索引位置

9.其他操作

清空列表

複製列表

注意:在操作list時,如果是涉及原地修改的操作,例如append,insert等,返回值是None
要防止出現這種語法 l1 = l1.append(‘a’) ,如果這樣,你將得到None…….

列表解析

定義和說明

列表推導式提供了一個建立連結串列的簡單途徑,無需使用 map() , filter() 以及 lambda 。以定義方式得到列表通常要比使用建構函式建立這些列表更清晰。每一個列表推導式包括在一個 for 語句之後的表示式,零或多個 for 或 if 語句。返回值是由 for 或 if 子句之後的表示式得到的元素組成的列表。如果想要得到一個元組,必須要加上括號。

基本列表解析

基本

多個值的

兩次迴圈

可以呼叫函式

注意,列表解析不會改變原有列表的值,會建立新的list

條件列表解析

巢狀列表解析

交換行列

其他:

1.根據索引取元素時,需要進行邊界檢查 IndexError
切片取,不需要,超過邊界不會異常

2.在迭代中修改列表
注意,不安全,不建議這麼幹
但是可以
for i in l1[:]:
l1.insert()……

3.多個list合成一個
就是

變為

處理

4.關於堆疊和佇列

通過上面的操作,可以發現,很輕易可以拿列表當做堆疊或者佇列使用

當然,他們有自己的模組,可以查相關庫

5.序列相關模組

array 一種受限制可變序列型別,要求所有元素必須是相同型別

copy 提供淺拷貝和深拷貝的能力

operator 包含函式呼叫形式的序列操作符,如 operator.concat(m,n) 相當於m+n

re 正規表示式

types 包含Python 支援的所有型別

collections 高效能容器資料型別

補充

2013-09-01 二維陣列初始化陷阱

對一維陣列,可以這麼做

但是對二維陣列,不成立

二維陣列,可以這麼做


The end!

wklken

Gighub: https://github.com/wklken

Blog: http://wklken.sinaapp.com/

2012-12-30

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

Python基礎-列表及列表解析小結 Python基礎-列表及列表解析小結

相關文章