chore: clean repository history

This commit is contained in:
xixu-me committed 2026-06-05 21:13:11 +08:00
commit e1fb2929c0
661 files changed
+167488

No files matched your search

@@ -0,0 +1,267 @@
---
doc_type: short
full_text: sources/05_Lists.md
---
# 05_Lists 摘要
本文介绍 Python列表:Python 中用于保存有序值集合的主要数据类型。列表支持创建、索引、修改、遍历、查找、删除、排序,以及与字符串之间的拆分和连接。
## 核心概念
### 创建列表
列表使用方括号字面量创建:
```python
names = ['Elwood', 'Jake', 'Curtis']
nums = [39, 38, 42, 65, 111]
```
字符串也可以通过 `split()` 拆分为列表:
```python
line = 'GOOG,100,490.10'
row = line.split(',')
# ['GOOG', '100', '490.10']
```
这体现了 Python字符串 与列表之间的常见转换关系。
## 列表基本操作
### 添加与拼接
- `append(x)`:在末尾添加元素。
- `insert(i, x)`:在指定位置插入元素。
- `+`:拼接两个列表,产生新列表。
- `*`:重复列表内容。
```python
names.append('Murphy')
names.insert(2, 'Aretha')
[1, 2, 3] + ['a', 'b']
# [1, 2, 3, 'a', 'b']
[1, 2, 3] * 3
# [1, 2, 3, 1, 2, 3, 1, 2, 3]
```
### 索引、负索引与修改
列表是有序序列,使用整数索引访问,索引从 `0` 开始;负索引从末尾开始计数。
```python
names[0] # 第一个元素
names[-1] # 最后一个元素
```
列表是可变对象,可以直接修改某个位置的元素:
```python
names[1] = 'Joliet Jake'
```
这与字符串等不可变序列形成对比,可归入 Python序列 的更大主题。
### 长度与成员测试
- `len(list)`:返回列表长度。
- `in`:判断元素是否存在。
- `not in`:判断元素是否不存在。
```python
len(names)
'Elwood' in names
'Britney' not in names
```
## 遍历与查找
使用 `for` 循环遍历列表中的元素:
```python
for name in names:
print(name)
```
使用 `index()` 查找某个值第一次出现的位置:
```python
names.index('Curtis')
```
注意:
- 如果元素出现多次,`index()` 只返回第一次出现的位置。
- 如果元素不存在,会抛出 `ValueError`。
## 删除元素
列表元素可以按值或按索引删除:
```python
names.remove('Curtis') # 按值删除
del names[1] # 按索引删除
```
删除后列表不会留下“空洞”,后续元素会自动前移。若使用 `remove()` 删除重复元素,只会删除第一个匹配项。
## 排序
列表可使用 `sort()` 进行原地排序:
```python
s = [10, 1, 7, 3]
s.sort()
# [1, 3, 7, 10]
```
反向排序:
```python
s.sort(reverse=True)
```
`sort()` 会修改原列表,不创建新列表。若希望保留原列表并得到排序结果,应使用 `sorted()`:
```python
t = sorted(s)
```
## 列表不等于数学向量
列表的 `+` 和 `*` 并不是数学向量或矩阵运算:
```python
[1, 2, 3] * 2
# [1, 2, 3, 1, 2, 3]
[1, 2, 3] + [10, 11, 12]
# [1, 2, 3, 10, 11, 12]
```
因此,Python 列表不适合作为 MATLAB、Octave、R 中那种向量或矩阵的直接替代。若需要数值计算,应使用类似 NumPy 的库,可关联到 Python数值计算。
## 练习要点
### Exercise 1.19:提取与重新赋值
通过股票代码字符串:
```python
symbols = 'HPQ,AAPL,IBM,MSFT,YHOO,DOA,GOOG'
symlist = symbols.split(',')
```
练习内容包括:
- 使用正索引与负索引访问元素。
- 修改指定位置的值。
- 使用切片提取子列表。
- 创建空列表并用 `append()` 添加元素。
- 使用切片赋值替换列表的一部分。
切片赋值会根据右侧列表长度自动调整左侧列表大小:
```python
symlist[-2:] = mysyms
```
### Exercise 1.20:遍历列表元素
使用 `for` 循环逐个处理列表元素:
```python
for s in symlist:
print('s =', s)
```
### Exercise 1.21:成员测试
练习使用 `in` 与 `not in` 检查股票代码是否在列表中:
```python
'AIG' in symlist
'AA' in symlist
'CAT' not in symlist
```
### Exercise 1.22:添加、插入与删除
练习以下方法:
- `append('RHT')`:末尾追加。
- `insert(1, 'AA')`:插入到第二个位置。
- `remove('MSFT')`:删除指定值。
- `index('YHOO')`:查找第一次出现的位置。
- `count('YHOO')`:统计出现次数。
该练习强调:列表允许重复值,但 `remove()` 只删除第一个匹配项。
### Exercise 1.23:排序
使用 `sort()` 对列表排序,或通过 `reverse=True` 反向排序:
```python
symlist.sort()
symlist.sort(reverse=True)
```
重点是理解原地修改:排序会直接改变 `symlist` 本身。
### Exercise 1.24:重新连接为字符串
使用字符串的 `join()` 方法将字符串列表连接为一个字符串:
```python
','.join(symlist)
':'.join(symlist)
''.join(symlist)
```
这与前面的 `split()` 构成互逆式的常见模式:
- `split()`:字符串 → 列表
- `join()`:列表 → 字符串
相关主题:Python字符串处理。
### Exercise 1.25:列表可以包含任意对象
列表可以包含不同类型对象,甚至嵌套列表:
```python
nums = [101, 102, 103]
items = ['spam', symlist, nums]
```
可以通过多重索引访问嵌套结构:
```python
items[1][1]
items[2][1]
```
但文档建议保持列表结构简单。通常一个列表应保存同一种类型的值,例如全是数字或全是字符串。混合不同类型、构造过度复杂的嵌套列表,会降低代码可读性并增加理解难度。
## 关键结论
- 列表是 Python 中最常用的有序集合类型之一。
- 列表可变,支持按索引修改、插入、删除和切片赋值。
- 列表支持遍历、成员测试、查找、计数和排序。
- `sort()` 是原地排序,`sorted()` 返回新列表。
- 列表的 `+` 和 `*` 是拼接与重复,不是数学向量运算。
- `split()` 和 `join()` 是字符串与字符串列表之间转换的核心工具。
- 虽然列表能包含任意对象和嵌套结构,但实际编程中应优先保持简单、一致的数据结构。
## Related Concepts
- [[concepts/Python-可变对象]]
- [[concepts/列表与序列]]
- [[concepts/字符串处理]]
- [[concepts/Python-不可变对象]]
- [[concepts/变量与数据类型]]
- [[concepts/Python-控制流与缩进]]
- [[concepts/迭代协议与生成器]]
- [[concepts/CSV-数据处理]]