Show 排序、反轉和查找櫃子內的東西在 上一講 中我們介紹了可以有效紀錄連續性資料的一種資料型態 — 當在處理一連串有順序性的資料的時候,如果能夠將其整理一下,依照大小、或是依照特性重新排列,在處理上會更加方便。在這一講中,將會介紹如何排序 另外,也會介紹 串列的排序1. 排序 list若想要排序 list 的話,我們會使用 list_name.sort() Note: sort 括號中可以設定排序的條件。 (1) 初始設定 以 bad 這個 list 為例,執行 bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana'] 排序後的結果如下,我們可以看到 若 list 的清單中元素的資料型態為整數或浮點數,則會遞增排列。 num = [23, 4, 53, 5 ,35, 6] 結果如下: (2) 倒轉排序 如果想要數字遞減排列、或是依照字母順序的反向排列呢 ? list_name.sort(reverse=True) 在括號中加上 2. 在不更動原 list 的情況下產生一個排序過的 list在上面使用 sorted_list = sorted(list_name) 我們使用 3. 反轉 list如果想要把 list 內東西的順序反轉的話,可以使用 list_name.reverse() 以 bad 這個清單為例,list 使用 bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana'] 原本以 串列的極值與查找1. list 的極大、極小值與總和想要直接取得 list 中的極值, 可以用 #極大值 若想知道 list 中各元素的總和,則有 sum(list_name) 例子如下 : num = [23, 4, 53, 5 ,35, 6] 程式便會很有效率地印出極大、極小值、以及這個 list 所有數字的總和了。 2. list 的查找(1) 要查找某一個元素在一個 list 裡面的索引值,可以使用 list_name.index(element) 使用的方法是,在 index 後的括號中輸入想要找的東西,這個 method 會將索引值回傳。 以 bad 這個 list 為例,如果想要知道 Dirty Diana 這首歌的索引值,可以輸入 bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana'] 值得注意的是,如果輸入的元素並不包含在 list 裡面的話,會出現 value error。例如把上面例子中的 那麼可以如何確認一個元素是否存在於 list 中呢? (2)
element in list_name 以剛剛要查詢的 Heal the World 為例,印出 bad = ['Bad','Smooth Criminal','Speed Demon','Man in the Mirror','Dirty Diana'] 由上面的例子可以看到,如果印出 list 與 for-loop剛剛介紹了如何判定某個元素在不在 list 當中,現在我們可以使用這個 operator 搭配 for loop,來印出一個 list 裡面的每一個元素。 for item in list_name: 使用 for loop 的時候記得要縮排 ! 迴圈每跑一次,item 就會等於 list 裡面的其中一個元素。 現在來建立一個新的清單 dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] 可以看到清單裡面的 item 就被一個一個印出來啦。 item 所代表的只是一個變數,可以自己任意設定名稱 (例如改成 i , j , k 等等都沒問題) ,如果把例子中的 item 改成 song 也會得到一樣的結果,可以自己試試看。 dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] enumerate function我們也可以使用 Python 中的一個函數來同時取得一個元素在一個 list 中的 index 與他的值。使用的方法如下 : for index, item in enumerate(list_name): 以 dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] 就會同時得到 index 和 value 了,非常方便。 如果不想另外用一個變數去接 index 也可以,結果如下: dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] 也可以自己更改 index 的起始值,在 enumerate function 後面加上 start 的定即可。方法如下: enumerate(list_name, start = 1) start 後面接上想設定為起始值的數字即可。 dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] 可以看到,元素前面的標號就變成從 1 開始了。 把 list 轉換為字串在處理 list
的時候,我們常常會想把一個 list 傳換成一個由一些特定的值所分開的字串 (string)。要做到這件事,會常使用到一個 string 的 method —
list_str = 'seperateStr(要用來隔開的符號)'.join(list_name) 舉例來說,如果我們想要把 Dangerous 這張專輯輸出成一個用逗號所隔開的字串,可以另外產生一個變數 程式碼如下 : dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] 執行的結果如下 : 可以看到,list 裡面的內容就被用逗號給隔開了~ 引號裡面的值是可以視你的需求隨意更換的,例如如果我們想要把專輯內容用斜線給隔開,把程式碼改為 把字串切成 list上面我們把 list 切成了一個字串,那我們可不可以反過來,將字串切成 list 呢? 答案當然是可以的(而且很常使用到)。我們使用 new_list = str.split() #如果括號中不放東西,就是以空白做切割 拿上面 dangerous 的例子來說明,如果想要把產生的字串做切割變回原本的 list, 程式碼如下: dangerous = ['Jam', 'In the Closet', 'Remember the Time',"Heal the World","Black or White","Who Is It","Give In to Me", "Dangerous"] 裡面的 有時在寫題目的時候,要處理一連串的數字資料,這個用法就很好用。 題目常給定一連串用空白的數字,例如 要分割 input()所輸入的值,程式碼如下: lst = input().split() 可以把 可以看到, 在 list 中的數字都有用雙引號刮起來,代表他們的型態都還是字串。 那如果想要把 list 中的數字都存成整數的形態要怎麼辦呢 ? 當 程式碼如下: lst = [int(num) for num in input().split()] Note: 這個方式在 Python 中叫做 List Comprehension 可以看到,程式在切割完就直接做型別轉換,然後指定給我們新要產生的 list 了,印出來的 list 裡面所裝的就是一個個的整數。 這個用法在寫題目的時候很方便,可以多加應用。 現在我們已經對 list 用法有更深的了解,可以更好的掌握一連串的資料了~接下來會介紹另外兩種跟 list 很像、但使用方式有些不同的資料型態。 我們是 ccClub 團隊,致力於讓 Python 成為大家的第二外語,希望能用淺顯易懂、循序漸進的方式,帶領新手一步步跨入程式設計的世界。如果你喜歡這篇文章,請給我們 1~10 個掌聲。 |