iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0


不知道大家吃飽睡飽嗎?一個禮拜就這樣來到Happy Friday!
但是鐵人的學習是不能停下來啊啊!
我們今天來介紹一個好用的變數型態!

櫃子!?


對你迷有看錯捏~你給我看這個?中午時間餓到可以把櫃子給吃了
冷靜想一下!這排櫃子的每個位置都是一個置放空間,想放什麼就放啥!藏書、藏禮物藏私房錢隨你開心!

但我們平常時會怎麼敘述要拿取櫃子裡面的東西呢?

「右邊數來第2個櫃子」...這一類的敘述應該很常出現吧!
But!But!如果有100,1000個櫃子...那要怎麼數?
這時候為了精準描述我們要拿的位置,會直接給每個櫃位編號!比如由左到右依序為1,2,3....。
☞這就是所謂的List

來關注下面這個List吧!


看起來應該更清楚明瞭List吧!
我們在這個綠色的櫃子,每一個位置我們叫做他是一個元素(element),裡面可以存放一個value,value是什麼型態都可以,而每一個位置都會有一個編號(index)。

要特別注意!編號是從0開始!編號是從0開始!編號是從0開始!

常見的List操作指令

假設有list L1:

L1[index]:尋找L1中index位置存放的值

L1.index(value):尋找value在L1中2第一個位置的index

L1.append(value):在現有的L1中,最後一個位置後面新增一個位置並指定為value

L1.remove(value):在現有的L1中,遇到第一次value時,將其移除

L1.pop(index):將L1中index位置的value拿掉

del(L1[index]):將L1中index位置的value拿掉

L1.count(value):統計value在L1中出現幾次

len(L1):L1中有多少個value

讓我來舉個例子吧!

L=[0]*2 
#output:L=[0,0]
L.append(3) 
#output:L=[0,0,3]
K=[0,0,3,4,1,2]
K.pop(4) 
#output:L=[0,0,3,4,2]
K.count('3') 
#output:0
del(L[2]) 
#output:L=[0,0,4,2]

看到這裡你應該覺得list操作其實不難嘛!!

進擊吧!List!

(三)(小)?還有啊?
當然啊~還有一些特殊的規則囉!

  1. list若從後面往前數的話,index則從-1,-2....依序排列,如下圖紅字標示
L=[3,4,5,7,8,9] 
L[-3] #output:7
  1. list.pop()視為最後一項被移除,和list.pop(-1)效果相同
L=[3,4,5,7,8,9] 
L.pop() #output:L=[3,4,5,7,8]
  1. L[i:k:step]從i到k-1的element,以step為間距,因此若沒填入數字則是忽略
L=[1,5,2,7,8,4] 
L[1:4] #output:[5,2,7]
L[1:] #output:[5,2,7,8,4]
L[1::] #output:[5,2,7,8,4]
L[:4] #output:[1,5,2,7] 
L[::4] #output:[1,8] 
  1. range(i,j,k)可以創造i~j之間,以k為間隔的整數數列,用在迴圈迭代使用,但他並不是list,range()就是個物件<class 'range'>
    註:若要讓range(i,j,k)成為list,可以使用list(range(i,j,k))作為使用

好啦~我開始肚子餓了!再不吃飯我就要把電腦吃掉了QQ,老樣子來思考一個比較間單的問題:
Q. 現在有一個陣列[5, 3, 4, 9, (3,5), ['I', 'T', 'iron'], 'man']請問這裡面有幾個element?
若取出element只有數字的部分,接著把最後一個和第二個數字交換,則這一個只有數字的list為何?

昨天的參考答案在這裡,你對了嗎?

感謝froce大大的更正,還有不對的地方麻煩大家幫忙了


上一篇
[Day3] 終於要開始寫程式嗎?
下一篇
[Day6]是該跟大家宣佈了
系列文
程式起手式及其應用-以python為例5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
froce
iT邦大師 1 級 ‧ 2019-09-06 15:40:57

補充一下:
1.第3段code是錯的,你對list的切片(slice)理解錯了。

L=[1,5,2,7,8,4] 
L[1:4] #output:[5,2,7]
L[1::] #output:[5,2,7,8,4]
L[1:]  #output:[5,2,7,8,4]
L[::4] #output:[1,8]
L[:4]  #output:[1,5,2,7]

[start:end:step],由於step可以選填,所以可以省略成
[start:end]

L[1::] #output:[5,2,7,8,4] 從1開始,到結尾,間隔為1
L[1:]  #output:[5,2,7,8,4] 從1開始,到結尾,間隔為1
L[::4] #output:[1,8]       從0開始,到結尾,間隔為4
L[:4]  #output:[1,5,2,7]   從0開始,到4,間隔為1

2.因為python2已經過時了,我只提python3的狀況。
在python3中,range()是物件(class range),他實現了迭代器,所以可以迭代。
如果要轉換成list,可以用下面兩種方式:

[i for i in range(4)]
list(range(4))

3.list是一種可變的變數型態,拿來當參數時要注意。

eason543 iT邦新手 5 級 ‧ 2019-09-06 17:49:37 檢舉

感謝froce大大的更正。

  1. 確實是我在撰寫時,這個部分沒有思考清楚就直接寫了!謝謝您的幫忙及更正
  2. range()我原本沒有打算講這麼困難的XD,只是想到有點關係就放進來,您提到將它變成list的方式已經更新到本文中了!
  3. 的確!list是一個可變動的變數,在參數使用上一定要特別小心。下一篇可能在介紹高維list會再多加強調,操作實務必要注意!

我要留言

立即登入留言