
深入解析Python中的list列表及其切片和迭代操作
這篇文章主要介紹了Python中的列表及其切片和迭代操作,文中還對(duì)tuple元組作了介紹,需要的朋友可以參考下
有序列表list
>>> listTest = ['ha','test','yes']
>>> listTest
['ha', 'test', 'yes']
len()獲取list元素個(gè)數(shù)。
>>> len(listTest)
3
可以用索引來(lái)訪(fǎng)問(wèn)每一個(gè)元素,0表示第一個(gè),-1還可以表示最后一個(gè),即倒數(shù)第一個(gè),依此類(lèi)推-2表示倒數(shù)第二個(gè),超過(guò)了也會(huì)報(bào)越界錯(cuò)誤。
>>> listTest[0]
'ha'
>>> listTest[1]
'test'
>>> listTest[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> listTest[-1]
'yes'
>>> listTest[-2]
'test'
也可以把元素插入到指定的位置,比如索引號(hào)為1的位置:
>>> listTest.insert(1,'jack')
>>> listTest
['ha', 'jack', 'test', 'yes']
刪除末尾元素,用pop()方法,添加到末尾用append():
>>> list
['ha', 'jack', 'test', 'yes']
>>> listTest.pop()
'yes'
>>> listTest
['ha', 'jack', 'test']
刪除指定位置的元素,用pop(i)方法,其中i是索引位置:
>>> listTest
['ha', 'jack', 'test']
>>> listTest.pop(1)
'jack'
>>> listTest
['ha', 'test']
把某個(gè)元素替換,直接賦值即可,并且類(lèi)型也可以不同:
>>> listTest
['ha', 'test']
>>> listTest[1] = 'debug'
>>> listTest
['ha', 'debug']
>>> listTest[1] = 123
>>> listTest
['ha', 123]
list也可以嵌套:
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
>>> s[1]
'java'
>>> s[2]
['asp', 'php']
>>> s[2][1]
'php'
空的list:
>>> L = []
>>> len(L)
0
不可變列表tuple
另一種有序列表叫元組:tuple。tuple和list非常類(lèi)似,但是tuple一旦初始化就不能修改。
>>> classmates = ('Michael', 'Bob', 'Tracy')
>>> classmates
('Michael', 'Bob', 'Tracy')
>>> classmates[1]
'Bob'
注意:由于tuple不可變,所以代碼更安全,如果可能,能用tuple代替list就盡量用tuple。
tuple的陷阱:當(dāng)你定義一個(gè)tuple時(shí),在定義的時(shí)候,tuple的元素就必須被確定下來(lái),比如:
>>> t = (1, 2)
>>> t
(1, 2)
如果要定義一個(gè)空的tuple,可以寫(xiě)成():
>>> t = ()
>>> t
()
但是,要定義一個(gè)只有1個(gè)元素的tuple,如果你這么定義:
>>> t = (1)
>>> t
1
定義的不是tuple,是1這個(gè)數(shù)!這是因?yàn)槔ㄌ?hào)()既可以表示tuple,又可以表示數(shù)學(xué)公式中的小括號(hào),這就產(chǎn)生了歧義,因此,Python規(guī)定,這種情況下,按小括號(hào)進(jìn)行計(jì)算,計(jì)算結(jié)果自然是1。
所以,只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào),,來(lái)消除歧義:
>>> t = (1,)
>>> t
(1,)
Python在顯示只有1個(gè)元素的tuple時(shí),也會(huì)加一個(gè)逗號(hào),,以免你誤解成數(shù)學(xué)計(jì)算意義上的括號(hào)。
最后來(lái)看一個(gè)可變的tuple:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
注意:tuple所謂的不變是說(shuō),tuple的每個(gè)元素,指向永遠(yuǎn)不變。
切片
取一個(gè)list或tuple中的部分元素,當(dāng)然其他語(yǔ)言,例如java也可以使用截取函數(shù),傳入?yún)^(qū)間進(jìn)行截取,但是Python提供了一個(gè)更簡(jiǎn)單的操作
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']
注意,3表示的不是截取的元素個(gè)數(shù),而是索引結(jié)束位置,即不包括索引為3的元素,如果開(kāi)始索引為0,還可以省略
>>> L[1:3]
['Sarah', 'Tracy']
>>> L[:3]
['Michael', 'Sarah', 'Tracy']
前面也提到過(guò),Python取元素還支持L[-1]這種取倒數(shù)第一個(gè)元素的操作
>>> L[-2:]
['Bob', 'Jack']
>>> L[-2:-1]
['Bob']
L[:],這個(gè)表示復(fù)制一個(gè)list,其實(shí)就是默認(rèn)把整個(gè)list切片。
迭代
這個(gè)和Java也差不多,在Java中也有迭代器以及foreach(element: elements)這種循環(huán)語(yǔ)句,在Python中,使用for ... in。
>>> for ch in 'abc':
... print ch
...
a
b
c
默認(rèn)情況下,dict通過(guò)key迭代。也可以通過(guò)value來(lái)迭代:for value in d.itervalues()。也可以同時(shí)迭代key和value:for k, v in d.iteritems()。
所以,只要判斷一個(gè)對(duì)象是可迭代對(duì)象就可以使用for ... in這種循環(huán),通過(guò)collections模塊的Iterable類(lèi)型判斷:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數(shù)是否可迭代
False
有時(shí)候也需要里列表里的下標(biāo),這點(diǎn)Python也提供了一個(gè)內(nèi)置的enumerate函數(shù),可以把一個(gè)list變成索引-元素對(duì),這樣就可以做到在for循環(huán)中迭代索引和元素本身。
>>> for i, value in enumerate(['A', 'B', 'C']):
... print i, value
...
0 A
1 B
2 C
還可以同時(shí)引用兩個(gè)變量
>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
... print x, y
...
1 1
2 4
3 9
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話(huà)題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10