# 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)