Python 中的 for 循環如何使用?

詳細的講下for循環+in關鍵字之間處理列表數據的方法 以及while循環 舉出具體例子來 讀《head first python》時沒有看懂書中這段 ,謝謝。


不要把 Python 中的 for 語法當 C 語言裡面那種 for 循環來用,雖然我們習慣上還是說 for 循環,但Python 中 for 的語義不是循環,而是遍歷迭代器——對一個迭代器(實現了 __next__)或者可迭代對象(實現了 __iter__)而言的。

比如:

for item in iterable:
do_something(item)

其實是等價於:

_iterable = iter(iterable) # iterable.__iter__()
while True:
try:
do_something(next(_iterable)) # _iterable.__next__()
except StopIteration:
break

如果用過 PHP,那 Python 中 for 和 PHP 中的 foreach 是一樣的。


更像 foreach 。


for 循環這麼用

&>&>&> a = [1, 2, 3]

&>&>&> for i in a:

print i

1

2

3

while 循環這麼用

&>&>&> i = 3

&>&>&> while i:

print i

i -= 1

3

2

1


我用專欄里的一篇文章來答題。

專欄鏈接:給妹子講python,歡迎大家關注,提意見!

下面我們來全方位的介紹for循環的詳細用法:

for循環與while相比更加通用,他是一個通用的序列迭代工具,可以遍歷任何有序的序列對象內的元素。例如之前介紹過的:字元串、列表、元組等,以及其他一些內置的可以用來迭代的對象(到時候專門展開)。

回顧幾個例子,列表、字元串、元組的遍歷

for x in [1,2,3,4]:
print(x, end=" ")

1 2 3 4

for x in "hello":
print(x, end=" ")

h e l l o

for x in ("i", "am", "a", "teacher"):
print(x,end=" ")

i am a teacher

T = [(1, 2), (3, 4), (5, 6)]
for (a, b) in T:
print(a,b)

1 2
3 4
5 6

這裡再單獨說說另外兩種特殊的內置類型對象,一個是字典、一個是文件。

字典的遍歷

字典的遍歷這裡單獨說說,相比於上面幾個序列類型,字典的特殊之處在於他內部的對象不是有序的。

但是他也能通過for循環來遍歷,常見的是通過值來遍歷,還有一種是通過鍵值對的元組來遍歷

D = {"a":1, "b":2, "c":3}
for key in D:
print(key, "---&>", D[key])

b ---&> 2
c ---&> 3
a ---&> 1

D = {"a": 1, "b": 2, "c": 3}
for (key, value) in D.items():
print(key, "---&>", value)

a ---&> 1
c ---&> 3
b ---&> 2

文件的遍歷

因為文件保存了很多字元和行,因此也是循環常見的典型使用案例,最原始的方法可以調用文件對象的read方法,把文件內容一次性載入至字元串對象

file = open("myfile.txt", "r")
print(file.read())

hello text file
goodbyt text file
Hahahahah

那麼如果想逐行讀取文本文件呢?for循環是最易於編寫及執行最快的選擇,這裡有兩種方法,

for line in open("myfile.txt","r").readlines():
print(line, end="")

for line in open("myfile.txt","r"):
print(line, end="")

hello text file
goodbyt text file
Hahahahah

這兩種方法的運行結果是一樣的,表面差別不大,但實際上有很大的區別:

第一種方法通過readlines方法,會首先一次性把文件載入到行字元串列表中,然後再對這個字元串列表進行迭代;

而第二種方法運行的原理則有所不同,他並非一次性將全部的文件內容載入到內存中,而是在迭代的時候,循環到了哪一行才將哪一行讀入到內存。這裡涉及到一個新的概念----迭代器(open函數返回的那個就是文件迭代器),後面再著重系統介紹。

現在我們只需要知道,第二種方法是文本文件讀取的最佳選擇,它簡單、且對任意大小的文件都有效,因為他不會一次性把整個文件都載入到內存中,相反第一種方法存在內存壓力過大的問題。


推薦閱讀:

Python3 是否已經完成了取代 Python2 的歷史進程?
求一本 Python 3 的好書,入門級別或中等級別,求推薦?
Python操作MySQL資料庫安全嗎?
哪裡有優秀的python代碼可供閱讀?
python 3.5 中 PEP0484 新加入的 Type Hints 的使用方法是什麼?

TAG:Python | Python3x | Python使用技巧 |