Python基礎 關於「迴圈」那些事

2021-10-05 06:16:27 字數 4797 閱讀 3984

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...