Python – for的應用,逆迴圈, slice的應用

在正常使用Python的for迴圈時不需要考慮什麼,但是如果要使用for的逆迴圈的話要注意一些小地方!

使用reversed

reversed這個函數會將指定的原本的list反轉過後return,但是對原本的list不會有任何影響。

test = [1, 2, 3, 4, 5, 6]
for n in reversed(test):
    print(n)
# 6
# 5
# 4
# 3
# 2
# 1

另外,如果在reversed中使用range的話也有相同的效果,如果想用range的話可以像下面這樣寫

for n in reversed(range(0, 6)):
    print(n)

slice的應用

另外我們在使用list時也可以利用list的slice功能來幫我們取得要指定的要素

例如:在有數字1~6的list中,我們想要取得1, 3, 5這三個數字,也就是每隔兩個取得一個數字時我們可以用下面的寫法。

test = [1, 2, 3, 4, 5, 6]
print(test[0:6:2]) #第0~5(6-1)個元素中每隔2個取得一次
#[1, 3, 5]

上面code中的最後一個:2的意思是每隔2個step取得一次的意思,另外,如果將這個數字設定為負數的話將從list的尾端開始數step。

test = [1, 2, 3, 4, 5, 6]
print(test[::-2])
#[6, 4, 2]

如果將最後的:2改成:-1的話就會有跟剛剛reversed一樣的功能

test = [1, 2, 3, 4, 5, 6]
print(test[::-1])
#[6, 5, 4, 3, 2, 1]

最後,range其實也有step的功能,但是比較特別的是range的step功能是以減法或加法來計算,例如range(1, 11, 3)的話就是從1~10的數字中每隔三個取得一次,而range(10, 0, -2)的話則是從10, 1中每隔-2個取得一次。另外要注意,range的範圍是第到指定的二個數字的前一個,例如指定(1, 10)的話就只會出現1~9。

for x in range(1, 11, 3):
  print(x)
#1
#4
#7
#10

for y in range(10, 0, -2):
  print(y)
#10
#8
#6
#4
#2

留言