while 迴圈
泛迴圈迴圈的跳出和繼續
python中常見的迴圈有兩類:
list
是最常見的可迭代物件,其他可迭代的物件例如dict
,set
,file lines,string
等
for i in set((1,2,3)):
print(i)
輸出:123
import string
list_num = list(string.digits)
for i in list_num:
# 輸出偶數
if int(i)%2 == 0:
print(i)
輸出:02468
range有頭無尾
,e.g.range(1,3)
實際得到的序列是(1,2)
for i in range(3):
print(i)
輸出:012
for i in range(1,9):
# 輸出偶數
if int(i)%2 == 0:
print(i)
輸出:2468
enumerate
為迴圈的list加上index,這個index是編號是從0開始的
list_val = [1,2,3,5,8]
for idx,val in enumerate(list_val):
print(idx,val)
輸出:
0 11 2
2 33 5
4 8同時遍歷兩個以上的list,並按順序打包
list_1 = string.digits[:3]
list_2 = string.ascii_lowercase[:3]
list_3 = string.ascii_uppercase[:3]
print(list_1,list_2,list_3)
輸出:012 abc abc
list_merge_1 = list(zip(list_1,list_2,list_3))
print(list_merge_1)
list_merge_2 = [i+j+k for (i,j,k) in zip(list_1,list_2,list_3)]
print(list_merge_2)
輸出:[('0', 'a', 'a'), ('1', 'b', 'b'), ('2', 'c', 'c')]['0aa', '1bb', '2cc']
# 元素組合
list_merge_3 = [i+j for i in list('123') for j in list('abc')]
print(list_merge_3)
輸出:['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
while相當於for和if的結合體。
while不一定執行的是迴圈,有時候功能和if差不多,這個時候while的意義相當於如果條件為真,那就執行如下操作
while更多扮演for和if聯合的角色,相當於重複執行如下操作,知道判斷條件(會不斷變化)不再成立為止
for和while的區別
# 需要break的配合
x = 2
while(x>1):
print('這個值大於1')
break
輸出:這個值大於1
# 需要自增的index來配合
idx = 1
while(idx < 5):
print(idx)
idx += 1
輸出:1234
如果將迴圈理解為按照順序遍歷乙個序列。除了用for、while還可以用其他函式達到「遍歷」的效果。
本質還是迴圈,常見的for迴圈在語句上的表現是多行,而列表解析
是一行
# 篩選奇數
num_odd = [i for i in range(1,10) if i%2==1]
print(num_odd)
輸出:[1, 3, 5, 7, 9]
對序列中多個物件執行相同操作
list(map(lambda x:x**2,range(4)))
輸出:[0, 1, 4, 9]
list_words = ['life','is','short','use','python']
list(map(lambda x:len(x),list_words))
輸出:[4, 2, 5, 3, 6]
變種的for迴圈
按順序將序列值一次「彈出」,同時被」彈出「的值移出序列
序列為空時,報錯stopiteration
vals_iter = iter(list(range(3)))
next(vals_iter)
輸出:0
迭代器可以如上述舉例一樣是」有窮「的迭代,也可以是」無窮「的,比如自增序列(index為自然順序)
# 定義乙個迭代器
class test_iter:
def __init__(self):
self.a = 1
self.b = 1
def __iter__(self):
return self
def __next__(self):
x = self.a
self.a, self.b = self.b, self.a+self.b
return x
fb = test_iter()
for i in range(6):
print(next(fb))
輸出:112358
生成器和迭代器的對比
相同點:
不同點:
def num_even(x):
while(x>0):
if x%2 == 0:
yield x
x -= 1
x = num_even(9)
for i in x:
print(i)
輸出:8642
break
是跳出迴圈,也就是不再執行該迴圈的操作,如果是巢狀迴圈,那麼上層的迴圈也終止
continue
跳過當前的操作,進入下一輪迴圈,對上層的迴圈沒有影響
pass
接著執行,用得很少,此處不講
break,continue之後的語句也不會執行,所以一定要注意這兩個關鍵字放置的位置
for i in range(5):
print(i)
if i == 2:
break # 當i=2時,迴圈結束
print('不會出現')
輸出:012
for i in range(5):
if i == 2:
continue # 跳過2這個值
print('不會出現')
print(i)
輸出:0134
i = 1
while(i<5):
print(i)
break # 執行一次就結束
print('不會出現')
輸出:1
i = 1
while(i<5):
print(i)
i += 1
if i == 2:
continue
print('不會出現')
輸出:1234
while中用continue要小心啊,比如如下**是會一直執行的
i = 1
while(i<5):
print(i)
if i == 2:
continue
print('不會出現')
i += 1
for i in range(3):
for j in list('abc'):
if j == 'b':
break # 到b的時候就停止了
print(i,j)
輸出:
0 a1 a
2 a
for i in range(3):
for j in list('abc'):
if i == 1 or j=='b':
continue
print(i,j) #不會出現帶1和b的輸出值
輸出:
0 a0 c
2 a2 c
[1]更多參考1:
[2]更多參考2:
python基礎那些事(二)
字串 切片序列 開始位置下標 結束位置下標 步長 包含結束位置下標對應的資料,正負整數均可 步長是選取間隔,正負整數均可,預設步長為1。例子name abcdefg print name 2 5 1 cde print name 2 5 cde print name 5 abcde print na...
python基礎那些事(三)
列表 資料1,資料2,資料3,資料4.查詢 1.下標 name list tom lily rose print name list 0 tom print name list 1 lily print name list 2 rose2.函式 index 返回指定資料所在位置的下標 列 表序列 i...
迴圈的那些事
相信很多小夥伴在學習js的時候,一開始遇到第乙個問題肯定就是關於迴圈的。今天帶大家來了解了解迴圈的內容。重複的執行一段 做的是相同或相似的事情 一 迴圈條件 規定了迴圈的執行次數 迴圈變數 二.迴圈操作 相同或相似的語句 迴圈體 一 do while迴圈 dowhile 條件 var count 0...