# 列表、元组、集合

URL: https://caijiao.org/python/ch04/list-tuple-set
Source: docs/python/ch04/list-tuple-set.md
Description: 本章节将介绍 Python 中的列表、元组和集合，详细讲解它们的定义、特性和用法，帮助你选择最适合的容器类型来存储数据。

[Python](/python/) 提供了三种常用的内置容器类型：列表、元组和集合。它们在存储数据时有不同的特性和使用场景，掌握它们的用法对于编写高效的 Python 程序非常重要。

## 列表 (List)

列表是 Python 中最常用的可变容器类型，它用于存储有序的元素集合。列表中的元素可以是不同类型的数据，且可以随时修改。

### 定义和使用：

```python
# 创建一个列表
my_list = [1, 2, 3, 4, 5]
print(my_list)

# 向列表添加元素
my_list.append(6)
print(my_list)

# 修改列表中的元素
my_list[0] = 10
print(my_list)
```

输出：

```
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[10, 2, 3, 4, 5, 6]
```

### 特性：

- **可变**：列表可以修改、添加、删除元素。
- **有序**：列表中元素按插入顺序排列，可以通过索引访问。
- **允许重复**：列表可以包含重复元素。

## 元组 (Tuple)

元组与列表类似，也是用于存储有序元素集合，不同之处在于元组是**不可变**的，一旦创建就不能修改。

### 定义和使用：

```python
# 创建一个元组
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple)

# 访问元组中的元素
print(my_tuple[2])
```

输出：

```
(1, 2, 3, 4, 5)
3
```

### 特性：

- **不可变**：一旦创建，元组中的元素不可修改。
- **有序**：元素按照插入顺序排列，可以通过索引访问。
- **允许重复**：元组可以包含重复元素。
- **哈希值**：由于元组是不可变的，可以作为字典的键，而列表不行。

## 集合 (Set)

集合是一个无序、不重复的元素集合，通常用于测试成员资格、去除重复元素等操作。与列表和元组不同，集合中的元素是无序的，无法通过索引访问。

### 定义和使用：

```python
# 创建一个集合
my_set = {1, 2, 3, 4, 5}
print(my_set)

# 向集合添加元素
my_set.add(6)
print(my_set)

# 删除集合中的元素
my_set.remove(3)
print(my_set)
```

输出：

```
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6}
```

### 特性：

- **无序**：集合中的元素没有固定顺序，不能通过索引访问。
- **不重复**：集合中的元素是唯一的，不能包含重复的元素。
- **可变**：集合的元素可以修改，但不能包含可变类型的元素（如列表）。

## 列表、元组与集合的比较

| 特性         | 列表 (List)            | 元组 (Tuple)           | 集合 (Set)               |
| ------------ | ---------------------- | ---------------------- | ------------------------ |
| 可变性       | 可变                   | 不可变                 | 可变                     |
| 是否有序     | 有序                   | 有序                   | 无序                     |
| 是否允许重复 | 允许重复               | 允许重复               | 不允许重复               |
| 用途         | 存储有序、可修改的元素 | 存储不可修改的元素     | 存储无序、唯一的元素     |
| 存储类型     | 可以存储任何类型的元素 | 可以存储任何类型的元素 | 可以存储不可变类型的元素 |

## 总结

- **列表** 是一个有序、可变的容器，适用于存储需要修改和顺序的重要数据。
- **元组** 是不可变的容器，适用于存储不需要修改的数据，或作为字典的键。
- **集合** 是一个无序、不重复的容器，适用于存储唯一的元素并进行集合运算。

选择合适的容器类型可以帮助你更高效地组织和处理数据。根据需求灵活选择列表、元组或集合将大大提高程序的可读性和性能。
