# Lists清單 > [color=#40f1ef][name=LHB阿好伯, 2020/11/25][:earth_africa:](https://www.facebook.com/LHB0222/) ###### tags: `Python_30` [TOC] 清單是有序和可修改(可變)的不同數據類型的集合 列表可以為空,也可以具有不同的數據類型項 # 清單建立 ## 建立空清單 list() 在R與Python中都使用list()函數建立空清單 下面我就分別在R與Python以list()建立空清單 再分別以class()與type()進行資料類型的確認 ```r= # R code Rdata <- list() print(class(Rdata)) ``` :::success [1] "list" ::: ```python= # Python code Pdata = list() type(Pdata) ``` :::success <class 'list'> ::: 在Python中則可以使用方括弧 ==[]== 建立清單 為 ==[]== 避免與後續功能搞混 建議都還是使用list() ```python=+ # Python code Pdata = [] type(Pdata) ``` :::success <class 'list'> ::: ## 建立多筆資料的清單 在R與Python中多筆資料的清單則以逗點分隔 ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon') print(class(fruits)) ``` :::success [1] "list" ::: ```python=+ # Python code fruits = list(('banana', 'orange', 'mango', 'lemon')) print(type(fruits)) ``` :::success <class 'list'> ::: # 清單索引 ## Indexing_正索引 在R與Python中若是要取出清單中特定位置的資料都可以使用 ==[]== 然而最大的不同在於R索引是由數字 ==1== 開始 而Python則是由數字 ==0== 開始 ![](https://i.imgur.com/AGuB2tu.png) ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon') print(fruits[1]) ``` :::success [[1]] [1] "banana" ::: ```python=+ # Python code fruits = list(('banana', 'orange', 'mango', 'lemon')) print(fruits[0]) ``` :::success banana ::: ## Negative Indexing_負索引 在Python的方括弧中填入負數則可以從清單的最後面進行索引 ![](https://i.imgur.com/ASaQCpy.png) ```python= # Python code fruits = list(('banana', 'orange', 'mango', 'lemon')) print(fruits[-1]) ``` :::success banana ::: 而在R中則是作為刪除索引資料用 ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon') print(fruits[-1]) ``` :::success [[1]] [1] "orange" [[2]] [1] "mango" [[3]] [1] "lemon" ::: ## Slicing Items from a List清單資料擷取 若是我們取出清單中特定範圍的數據 R與Python可以使用冒號 ==:== 做選取 在Python可以通過指定開始,結束和步長來指定索引範圍,返回值將是一個新列表。 (default values for start = 0, end = len(lst) - 1 (last item), step = 1) ```python= #Python Code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits[0:4] # ['banana', 'orange', 'mango', 'lemon'] fruits[0:] # ['banana', 'orange', 'mango', 'lemon'] fruits[1:3] # ['orange', 'mango'] fruits[1:] #['orange', 'mango', 'lemon'] fruits[::2] # ['banana', 'mango'] fruits[-4:] # ['banana', 'orange', 'mango', 'lemon'] fruits[-3:-1] # ['orange', 'mango'] fruits[-3:] # ['orange', 'mango', 'lemon'] fruits[::-1] # ['lemon', 'mango', 'orange', 'banana'] 反轉清單 ``` ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon') fruits[1:3] ``` :::success [[1]] [1] "banana" [[2]] [1] "orange" [[3]] [1] "mango" ::: ### Reversing a List 清單反轉 在前面範例有提到 ==fruits[::-1]== 可以反轉清單 而在Python中也可以使用 ==.reverse()== 達到相同功能 注意reverse()不返回任何值而是更新清單 ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits.reverse() print(fruits) ``` :::success ['lemon', 'mango', 'orange', 'banana'] ::: R語言中則是使用 ==rev()== 進行反轉 ```r= # R code ages <- list('banana', 'orange', 'mango', 'lemon') print(rev(ages)) ``` :::success [[1]] [1] "lemon" [[2]] [1] "mango" [[3]] [1] "orange" [[4]] [1] "banana" ::: # 清單修改 ## Modifying Lists修改清單 可以利用賦值的方式進行修改 ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits[3] = "avocado" print(fruits) ``` :::success ['banana', 'orange', 'mango', 'avocado'] ::: ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon') fruits[4] <- "avocado" print(fruits) ``` :::success [[1]] [1] "banana" [[2]] [1] "orange" [[3]] [1] "mango" [[4]] [1] "avocado" ::: ## Adding Items to a List添加清單項目 在Python使用.append()進行添加 :::danger list.append(item) ::: ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits.append('apple') print(fruits) ``` :::success ['banana', 'orange', 'mango', 'lemon', 'apple'] ::: 而R則是使用append()函數新增 :::danger append(list, item) ::: ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon') fruits <- append(fruits,'apple') fruits ``` :::success [[1]] [1] "banana" [[2]] [1] "orange" [[3]] [1] "mango" [[4]] [1] "lemon" [[5]] [1] "apple" ::: ### Joining Lists串接清單 在Python中可以使用加號運算符 ==+== 或 ==.extend()== 連接兩個或多個清單 ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits2 = fruits + fruits print(fruits2) ``` :::success ['banana', 'orange', 'mango', 'lemon', 'banana', 'orange', 'mango', 'lemon'] ::: ```python=+ # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits.extend(fruits) print(fruits) ``` :::success ['banana', 'orange', 'mango', 'lemon', 'banana', 'orange', 'mango', 'lemon'] ::: 若是在R我們也是使用 ==c()== 來進行連接 ```r= # R code # R code fruits <- list('banana', 'orange', 'mango') fruits2 <- c(fruits,fruits) print(fruits2) ``` :::success [[1]] [1] "banana" [[2]] [1] "orange" [[3]] [1] "mango" [[4]] [1] "banana" [[5]] [1] "orange" [[6]] [1] "mango" ::: ## Removing Items from a List刪除清單項目 在python中使用.remove()刪除列表中==第一個==指定的項目 :::success lst = ['item1', 'item2'] lst.remove(item) ::: ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon', 'banana'] fruits.remove('banana') print(fruits) ``` :::success ['orange', 'mango', 'lemon', 'banana'] ::: 而在R中remove() = rm() 是用於刪除物件的 ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon', 'banana') rm(fruits) fruits ``` :::success 錯誤: 找不到物件 'fruits' ::: 在R中若是要達到一樣的效果 可以使用索引搭配關係運算子達成相同功能 ```r=+ # R code fruits <- list('banana', 'orange', 'mango', 'lemon', 'banana') fruits[fruits != 'lemon'] ``` :::success [[1]] [1] "banana" [[2]] [1] "orange" [[3]] [1] "mango" [[4]] [1] "banana" ::: ### Removing Items Using Pop刪除清單最後一個項目 .pop()將刪除指定的索引(如果未指定index,則刪除最後一項) :::danger lst = ['item1', 'item2'] lst.pop() # 刪除最後一項 lst.pop(index) # 刪除指定索引 ::: ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon', 'banana'] fruits.pop() print(fruits) ``` :::success ['banana', 'orange', 'mango', 'lemon'] ::: ```python=+ fruits.pop(0) print(fruits) # ['orange', 'mango'] ``` :::success ['orange', 'mango', 'lemon'] ::: 若是在R中則是一樣利用索引搭配length()取得清單長度 就可以刪除最後一項 ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon', 'banana') fruits[-length(fruits)] ``` :::success [[1]] [1] "banana" [[2]] [1] "orange" [[3]] [1] "mango" [[4]] [1] "lemon" ::: ### Removing Items Using Del 刪除物件 ==del==為特殊關鍵字可以刪除指定的索引 可用於刪除索引範圍內的項目 也可以完全刪除清單 :::danger lst = ['item1', 'item2'] del lst[index] # 刪除指定索引 del lst # 刪除整個物件 ::: ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon', 'kiwi', 'lime'] del fruits[0] print(fruits) ``` :::success ['orange', 'mango', 'lemon', 'kiwi', 'lime'] ::: 刪除索引範圍內的項目 ```python=+ del fruits[1:3] # this deletes items between given indexes, so it does not delete the item with index 3! print(fruits) # ['orange', 'lime'] ``` :::success ['orange', 'kiwi', 'lime'] ::: 也可以完全刪除清單 ```python=+ del fruits print(fruits) ``` :::success NameError: name 'fruits' is not defined ::: 而R則是一樣使用負索引與rm()就可以達到相同功能 刪除索引範圍內的項目 ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon', 'banana') fruits[-c(1:4)] ``` :::success [[1]] [1] "banana" ::: 完全刪除清單 ```r=+ rm() ``` ### Clearing List Items清空清單 :::danger lst = ['item1', 'item2'] lst.clear() ::: ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits.clear() print(fruits) ``` :::success [] ::: 而R則可以以賦值的方式將空清單取代原清單達到相同功能 或是利用負索引與length()清除清單 ```r= # R code fruits <- list('banana', 'orange', 'mango', 'lemon', 'banana') fruits <- list() fruits[-c(1:length(fruits))] ``` :::success list() #空清單 ::: ## Counting Items in a List計算清單中特定物件數量 在Python中使用 ==.count()== 計算清單數量 ```python= # Python code ages = [22, 19, 24, 25, 26, 24, 25, 24] print(ages.count(24)) ``` :::success 3 ::: 若是在R中可以使用 ==關係運算子== 搭配 ==sum()==得出一樣結果 ```r= # R code ages <- list(22, 19, 24, 25, 26, 24, 25, 24) sum(ages == 24) ``` :::success [1] 3 ::: ## Finding Index of an Itemt查詢特定物件 使用 ==.index()== 可以得到清單中特定物件第一次出現的索引 ```python= # Python code ages = [22, 19, 24, 25, 26, 24, 25, 24] print(ages.index(24)) ``` :::success 2 ::: 在R語言中利用索引與關係運算子也可以得出類似的功能 甚至可以得到所有相同物件的索引 ```r= # R code ages <- list(22, 19, 24, 25, 26, 24, 25, 24) priny(c(1:length(ages))[(ages == 24)]) ``` :::success [1] 3 6 8 ::: # Sorting List Items 清單排序 最後介紹對清單進行排序 可以使用 ==sort()== 或 ==sorted()== 進行升序排列並修改原清單 如果 ==sort()== 中reverse的參數等於true 則將以降序排列清單 ```python= # Python code fruits = ['banana', 'orange', 'mango', 'lemon'] fruits.sort() print(fruits) #按字母排序 ``` :::success ['banana', 'lemon', 'mango', 'orange'] ::: ```python= # Python code ages = [22, 19, 24, 25, 26, 24, 25, 24] ages.sort(reverse=True) #降序排列 print(ages) ``` :::success [26, 25, 25, 24, 24, 24, 22, 19] ::: 全文分享至 https://www.facebook.com/LHB0222/ 有疑問想討論的都歡迎於下方留言 喜歡的幫我分享給所有的朋友 \o/ 有所錯誤歡迎指教 # [:page_with_curl: 全部文章列表](https://hackmd.io/@LHB-0222/AllWritings) ![](https://i.imgur.com/47HlvGH.png)