迴圈
while
程式碼1
x = 1
while x <= 100
print x
x += 1
程式碼2
在程式要求輸入名字時按下回車,程式會再次要求輸入名字,因為name是空字串,值為false。
name = ``
while not name:
name = raw_input(`your name:`)
print name
# while not name or name.isspace()
# while not name.strip()
for
words = [`this`,`is`,`AJ1`]
for word in words:
print word
numbers = [1,2,4,5,6,7]
for num in numbers:
print num
Range()
內建的範圍函式range()
range(1,10)
#output: [0,1,2,3,4,5,6,7,8,9]
#列印1~100
for num in range(1,100):
print num
Range()
vs xrange()
range()一次建立整個序列
xrange()一次只建立一個數
迭代巨大的序列時,xrange()更加高效
遍歷字典
遍歷字典的所有鍵
d = {`x`:1, `y`:2, `z`:3}
for key in d:
print key, d[key]
# 取值: 用 d.values 代替 d.keys
items()
方法items()
方法返回鍵值對元組,for
可以迴圈中使用序列解包
for key, value in d.items():
print key,value
注:字典元素順序不確定
迭代工具
並行迭代
同時列印名字和對應年齡
names = [`afra`, `ala`, `joe`, `bob`]
ages = [1,2,3,4]
for i in range(len(names)):
print name[i], age[i]
# i 為迴圈索引
zip()
zip()
將多個序列組合成一個元組列表。處理不等長序列時,止於最短序列。
zip(names, age)
# [(`afra`,1),(`ala`,2),(`joe`,3),(`bob`,4)]
# 迴圈解包元組
for name, age in zip(name, ages):
print name,age
#不等長序列
zip(range(5), xrange(10000))
按索引迭代
任務:訪問序列物件,同時獲取當前物件索引。例如,在字串中替換包含‘xxx’的子字串。
版本一(不推薦):
for string in strings:
if `xxx` in string:
index = strings.index(string)
string[index] = `[replace]`
版本二:
index = 0
for string in strings:
if `xxx` in string:
strings[index] = `[replace]`
index += 1
# 這段程式碼在《Python基礎教程第二版》P79, 我認為原書程式碼中 index+=1 的縮排格式應該是錯了?
版本三(推薦):
使用內建函式 enumerate()
翻轉和排序迭代