Python常見的數(shù)據(jù)結(jié)構(gòu)的遍歷
嚴(yán)格來說,任何實(shí)現(xiàn)了__iter__方法或__getitem__方法的對(duì)象都可以被遍歷。
但是要注意,不是所有東西都適合遍歷,比如數(shù)字(整數(shù)、浮點(diǎn)數(shù))就不能直接遍歷,除非將其包裝成范圍或序列。
在Python中,我們通常說“可迭代對(duì)象”(Iterable)是指那些能夠一次返回一個(gè)元素的對(duì)象。例如,在for循環(huán)中,我們遍歷的就是可迭代對(duì)象。
不是所有東西都可以直接遍歷,但Python中大多數(shù)容器和序列都可以! 主要有以下幾類可遍歷的對(duì)象:
一、可以直接遍歷的常見類型:
1.字符串- 遍歷字符
s = "hello"
for char in s: # 'h' → 'e' → 'l' → 'l' → 'o'
print(char)
2.列表- 遍歷元素
lst = [1, 2, 3]
for item in lst: # 1 → 2 → 3
print(item)
3.元組- 遍歷元素
tup = (1, 2, 3)
for item in tup: # 1 → 2 → 3
print(item)
4.字典- 默認(rèn)遍歷鍵,也可遍歷值或鍵值對(duì)
d = {'a': 1, 'b': 2}
# 默認(rèn)遍歷鍵
for key in d: # 'a' → 'b'
print(key)
# 遍歷值
for value in d.values(): # 1 → 2
print(value)
# 遍歷鍵值對(duì)
for key, value in d.items(): # ('a', 1) → ('b', 2)
print(key, value)5.集合- 遍歷元素(無序)
s = {1, 2, 3}
for item in s: # 順序不確定
print(item)
6.range對(duì)象- 遍歷數(shù)字序列
for i in range(5): # 0 → 1 → 2 → 3 → 4
print(i)
7.文件對(duì)象- 遍歷行
with open('file.txt') as f:
for line in f: # 一行一行讀取
print(line)
二、需要特殊方法才能遍歷的:
8.enumerate對(duì)象- 同時(shí)獲取索引和值
s = "abc"
for i, char in enumerate(s): # (0,'a') → (1,'b') → (2,'c')
print(i, char)
9.zip對(duì)象- 同時(shí)遍歷多個(gè)序列
names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages): # ("Alice",25) → ("Bob",30)
print(name, age)
10.生成器- 惰性遍歷
# 生成器表達(dá)式
gen = (x*2 for x in range(3)) # 0 → 2 → 4
for num in gen:
print(num)
三、不能直接遍歷的常見類型:
1.數(shù)字(整數(shù)、浮點(diǎn)數(shù))- ? 不能遍歷
num = 123
for digit in num: # ? TypeError: 'int' object is not iterable
print(digit)
需要先轉(zhuǎn)換:
num = 123
for digit in str(num): # '1' → '2' → '3'
print(digit)
2.布爾值- ? 不能遍歷
flag = True
for item in flag: # ? TypeError: 'bool' object is not iterable
print(item)
3.None- ? 不能遍歷
value = None
for item in value: # ? TypeError: 'NoneType' object is not iterable
print(item)
4.單個(gè)對(duì)象- ? 需要容器包裝
obj = "I'm a string, but..."
for char in obj: # ? 可以,因?yàn)樽址强傻?
print(char)
num = 42
for item in num: # ? 不行
print(item)
# 需要包裝成容器
for item in [num]: # ? 可以
print(item)四、判斷是否能遍歷的技巧:
from collections.abc import Iterable
print(isinstance("hello", Iterable)) # ? True
print(isinstance([1,2,3], Iterable)) # ? True
print(isinstance(123, Iterable)) # ? False
print(isinstance(True, Iterable)) # ? False
print(isinstance(None, Iterable)) # ? False總結(jié):
- 可以遍歷的:字符串、列表、元組、字典、集合、range、文件等容器
- 不能直接遍歷的:數(shù)字、布爾值、None等單一值
- 核心原則:如果包含多個(gè)元素(序列、集合、映射),通常可以遍歷;如果是單個(gè)值,通常不能直接遍歷
記?。寒?dāng)你看到 for x in y: 時(shí),y 必須是一個(gè)可迭代對(duì)象(包含多個(gè)元素)。
到此這篇關(guān)于Python常見的數(shù)據(jù)結(jié)構(gòu)的遍歷的文章就介紹到這了,更多相關(guān)python數(shù)據(jù)結(jié)構(gòu)的遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹結(jié)構(gòu)定義與遍歷方法詳解
- python數(shù)據(jù)結(jié)構(gòu)之二叉樹的遍歷實(shí)例
- 淺談python數(shù)據(jù)結(jié)構(gòu)之動(dòng)態(tài)規(guī)劃
- 關(guān)于Python的高級(jí)數(shù)據(jù)結(jié)構(gòu)與算法
- Python數(shù)據(jù)結(jié)構(gòu)隊(duì)列解決約瑟夫斯問題
- python常用數(shù)據(jù)結(jié)構(gòu)集合詳解
- python常用數(shù)據(jù)結(jié)構(gòu)元組詳解
- Python數(shù)據(jù)結(jié)構(gòu)之遞歸方法詳解
- Python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列詳解
相關(guān)文章
SpringBoot實(shí)現(xiàn)登錄注冊(cè)常見問題解決方案
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)登錄注冊(cè)常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
詳解Python中Sync與Async執(zhí)行速度快慢對(duì)比
Python新的版本中支持了async/await語法, 很多文章都在說這種語法的實(shí)現(xiàn)代碼會(huì)變得很快, 但是這種快是有場景限制的。這篇文章將嘗試簡單的解釋為何Async的代碼在某些場景比Sync的代碼快2023-03-03
python開發(fā)的自動(dòng)化運(yùn)維工具ansible詳解
ansible是新出現(xiàn)的自動(dòng)化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能,這篇文章主要介紹了python開發(fā)的自動(dòng)化運(yùn)維工具ansible詳解,需要的朋友可以參考下2021-08-08
Python內(nèi)置函數(shù)bin() oct()等實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換
使用Python內(nèi)置函數(shù):bin()、oct()、int()、hex()可實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換;先看Python官方文檔中對(duì)這幾個(gè)內(nèi)置函數(shù)的描述,需要了解的朋友可以參考下2012-12-12
Python保存數(shù)據(jù)到文件的實(shí)現(xiàn)方式
這篇文章主要介紹了Python保存數(shù)據(jù)到文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

