---
# System prepended metadata

title: 6-4 進階串列操作
tags: [chapter 6, Python]

---

###### tags: `chapter 6` `Python`
# 6-4 進階串列操作 #
前面已經介紹不少串列常用的操作，接下來會介紹更多串列操作讓大家認識。

`index()`：利用特定變數值去尋找該變數在串列裡的`index`。
```python=
cars = ['toyota', 'nissan', 'honda']
search_index = cars.index('nissan')
print(search_index)

# 1
```

`count()`：計算特定變數在串列裡出現的次數。
```python=
cars = ['toyota', 'nissan', 'honda', 'honda', 'bmw']
num_of_honda = cars.count('honda')
print(num_of_honda)

# 2
```

`join()`：將串列元素合併，需宣告一個字元或者字串，且利用該變數作為合併字串後的分隔字元。
```python=
cars = ['toyota', 'nissan', 'honda', 'honda', 'bmw']
char = '_'
print(char.join(cars))

# toyota_nissan_honda_honda_bmw
```

## 串列的複製 ##
串列的複製會稍微複雜一點，直觀上來說應該只要指派到另外一個變數即可，但真的是這樣嗎？
```python=
MySports = ['basketball', 'baseball', 'swim']
FriendSports = MySports
```

直觀上來說，這樣代表`MySports`和`FriendSports`是一樣的，而且接下來彼此會互不干涉，但如果這時對裡面做一些操作。

```python=
MySports = ['basketball', 'baseball', 'swim']
FriendSports = MySports
MySports.append('tennis')
print(MySports)
print(FriendSports)

# ['basketball', 'baseball', 'swim', 'tennis']
# ['basketball', 'baseball', 'swim', 'tennis']
```

奇怪的事情來了，我朋友也跟著學了網球？

![](https://i.imgur.com/44c6G7w.png)
這個情況是因為在記憶體實作`MySports = FriendSports`部分其實只是從`FriendSports`簽一條線到`MySports`而已，並沒有真的複製一份出來，他們在底層的部分仍然共用同一份資料，追根究柢他們仍然是同一個螺絲盒！
可以使用`id(MySports)`、`id(FriendSports)`去查看兩個變數在記憶體的位置！
![](https://i.imgur.com/0jfd6hq.png)

如果想要複製一份一樣的變數到"另一個位址"，你可以這樣實作。
```python=
MySports = ['basketball', 'baseball', 'swim']

FriendSports = MySports[:]

MySports.append('tennis')
print(MySports)
print(FriendSports)

# ['basketball', 'baseball', 'swim', 'tennis']
# ['basketball', 'baseball', 'swim']
```
這樣就完成了字串的"真正"複製囉!!