---
# System prepended metadata

title: Lists清單
tags: [Python_30]

---

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

