嗨,大家好。
還記得昨天的小練習嗎?
學了那麼多天語法,好像都沒有練習ㄟ?
不然我們來個小練習好了,題目是這樣的:
請創造兩個陣列
第一個陣列包含1~20中的偶數
另一個包含1~20中的奇數
(我昨天打成0~20,抱歉QQ)
然後請用一個for迴圈印出以下結果:
1 <---> 2
3 <---> 4
5 <---> 6
7 <---> 8
9 <---> 10
11 <---> 12
13 <---> 14
15 <---> 16
17 <---> 18
19 <---> 20
看見這個題目,直觀一點大概會這樣寫:
arr1 = [i for i in range(1, 21) if i % 2 == 1]
arr2 = [i for i in range(1, 21) if i % 2 == 0]
for index in range(len(arr1)):
print(arr1[index], '<--->', arr2[index])
基本上就是分別找出1~20的基數與偶數,用for迴圈取出來,並印出。
一開始我們講過如果要在一行輸出多個值,可以將他們通通傳給print
函式,他會用空白將他們隔開再一並輸出。
不過今天如果要在一個for迴圈,操作兩個等長的陣列時,習慣Python的人可能會這樣做:
arr1 = [i for i in range(1, 21, 2)]
arr2 = [i for i in range(2, 21, 2)]
for o, e in zip(arr1, arr2):
print(o, e, sep=' <---> ')
這邊我們有幾個要點要注意。
首先,在創造元素的時候,其實基偶數的規則是可以用range表達出來的,因此我們不在List Comprehension裡面做if判斷。這樣除了程式碼比較精簡以外,效率也會提升喔!
接著我們來看看zip
這個函式,這個函式會接受不限個數的序列容器,並把他們合而為一,成為一個超大的序列容器。
你可能會好奇她是怎麼做的,讓我們來看看一個實例:
假設你今天有兩個陣列,分別為
現在我們要從一個裝有tuple的容器取出元素,那我們應該怎麼接?
事實上,以下兩種方法都是可行的:
arr1 = [i for i in range(10)]
arr2 = [i for i in range(5, 15)]
for t in zip(arr1, arr2):
print(t[0], t[1])
print('*' * 10)
for i, j in zip(arr1, arr2):
print(i, j)
print('*' * 10)
第一種方法,直接用一個變數接住tuple,再用index取值。
第二種方法,既然事先知道壓縮了幾個容器,也就知道裡面tuple的長度,因此用一樣多的變數接住他 (以上面例子來說,要用兩個變數i, j
。
最後最後,教教大家怎麼很潮的使用print。
其實同時輸出值的時候,中間不一定要用空白隔開,你可以給print函式sep
這個參數,如此一來就可以用自己喜歡的方式隔開輸出值了!