Python3 list() 函数完全指南:用法、场景与实战
list() 是 Python 中最基础且高频的内置函数,核心作用是创建列表(list) ------ 既可生成空列表,也可将可迭代对象(字符串、元组、字典等)转换为列表。以下从「基础用法→进阶场景→注意事项」系统讲解,覆盖所有核心使用场景。
一、list() 核心语法
语法格式
python
list([iterable])
- 参数 :
iterable(可选)------ 可迭代对象(字符串、元组、集合、字典、生成器、range 等),省略时生成空列表; - 返回值 :一个新的列表(
list类型); - 核心逻辑:遍历可迭代对象的所有元素,将其依次存入新列表并返回。
二、4大基础用法(必掌握)
1. 生成空列表(无参数)
最简洁的创建空列表方式,后续可通过 append()、extend() 等方法添加元素。
python
# 生成空列表
empty_list = list()
print(empty_list) # 输出:[]
print(type(empty_list)) # 输出:<class 'list'>
# 后续操作(添加元素)
empty_list.append(1)
empty_list.extend([2, 3])
print(empty_list) # 输出:[1, 2, 3]
✅ 对比:[] 与 list() 都能创建空列表,日常开发中 [] 更简洁,但 list() 在动态场景(如函数参数默认值)中更安全(避免默认参数共享问题)。
2. 转换字符串为字符列表
将字符串拆分为单个字符的列表(前序问题中"字符串转数组"的核心用法)。
python
s = "hello"
char_list = list(s)
print(char_list) # 输出:['h', 'e', 'l', 'l', 'o']
# 特殊字符串处理
s2 = "a b!c"
char_list2 = list(s2)
print(char_list2) # 输出:['a', ' ', 'b', '!', 'c'](保留所有字符,包括空格、标点)
3. 转换元组/集合为列表
元组(tuple)是不可变对象,集合(set)无序且无重复元素,通过 list() 可转为可变列表,方便后续修改。
python
# 元组转列表(解决元组不可变问题)
t = (1, 2, 3, "a")
list_from_tuple = list(t)
print(list_from_tuple) # 输出:[1, 2, 3, 'a']
list_from_tuple[0] = 100 # 列表可修改
print(list_from_tuple) # 输出:[100, 2, 3, 'a']
# 集合转列表(注意:集合无序,列表顺序不确定)
s = {3, 1, 2, 2} # 集合自动去重
list_from_set = list(s)
print(list_from_set) # 输出:[1, 2, 3](顺序可能不同,取决于系统)
4. 转换字典相关(键/值/项)
字典(dict)的可迭代对象默认是键(key) ,也可通过 keys()、values()、items() 转换对应列表:
python
d = {"name": "Alice", "age": 25, "city": "Beijing"}
# 1. 默认转换:字典 → 键列表
list_keys = list(d)
print(list_keys) # 输出:['name', 'age', 'city'](Python3.7+ 保留插入顺序)
# 2. 转换值列表
list_values = list(d.values())
print(list_values) # 输出:['Alice', 25, 'Beijing']
# 3. 转换键值对列表(每个元素是元组)
list_items = list(d.items())
print(list_items) # 输出:[('name', 'Alice'), ('age', 25), ('city', 'Beijing')]
三、进阶用法(处理其他可迭代对象)
1. 转换 range 对象为列表
range 是生成整数序列的可迭代对象,list() 可将其转为完整的整数列表(常用于快速创建有序数列)。
python
# range(起始, 结束, 步长) → 列表
num_list = list(range(1, 10, 2)) # 1到9,步长2
print(num_list) # 输出:[1, 3, 5, 7, 9]
# 简化:range(5) → 0到4
num_list2 = list(range(5))
print(num_list2) # 输出:[0, 1, 2, 3, 4]
2. 转换生成器/迭代器为列表
生成器(generator)是惰性迭代对象(仅遍历一次),list() 可强制其生成所有元素并转为列表(方便重复访问)。
python
# 生成器表达式 → 列表
gen = (x * 2 for x in [1, 2, 3]) # 生成器:1*2, 2*2, 3*2
list_from_gen = list(gen)
print(list_from_gen) # 输出:[2, 4, 6]
# 迭代器(如 map 对象)→ 列表
iter_map = map(str, [1, 2, 3]) # map 生成迭代器
list_from_map = list(iter_map)
print(list_from_map) # 输出:['1', '2', '3']
3. 转换嵌套可迭代对象(二维结构)
若可迭代对象内部是嵌套结构(如元组嵌套、列表嵌套),list() 仅外层转换为列表,内层结构保持不变:
python
nested_iter = ((1, 2), (3, 4), (5, 6)) # 元组嵌套元组
nested_list = list(nested_iter)
print(nested_list) # 输出:[(1, 2), (3, 4), (5, 6)](外层是列表,内层仍为元组)
# 如需完全转为二维列表,需额外处理(如列表推导式)
full_nested_list = [list(item) for item in nested_iter]
print(full_nested_list) # 输出:[[1, 2], [3, 4], [5, 6]]
四、关键注意事项(避坑指南)
1. 不可迭代对象不能转换
list() 的参数必须是"可迭代对象"(即支持 for 循环遍历),若传入数字、布尔值等不可迭代对象,会报错 TypeError:
python
# 错误示例:传入整数(不可迭代)
list(123) # 报错:TypeError: 'int' object is not iterable
# 正确示例:若需将单个元素转为列表,直接用 [元素]
single_list = [123]
print(single_list) # 输出:[123]
2. 字符串转换的"最小单位"是字符
无论字符串内容如何(如数字字符串、中文字符串),list() 都会按单个字符拆分,而非按语义拆分:
python
s = "123abc中文"
char_list = list(s)
print(char_list) # 输出:['1', '2', '3', 'a', 'b', 'c', '中', '文']
3. 集合/字典转换的"无序性"
- 集合(
set)无序,转换为列表后顺序不确定(不依赖插入顺序); - Python3.7 之前的字典无序,转换为列表的键顺序也不确定(3.7+ 已支持保留插入顺序)。
4. 生成器转换后"耗尽"
生成器是惰性迭代,一旦通过 list() 转换为列表,原生成器会被"耗尽",再次遍历无结果:
python
gen = (x for x in [1, 2, 3])
list1 = list(gen)
print(list1) # 输出:[1, 2, 3]
list2 = list(gen) # 原生成器已耗尽
print(list2) # 输出:[]
五、常见使用场景总结
| 场景需求 | 代码示例 | 输出结果 |
|---|---|---|
| 创建空列表 | list() |
[] |
| 字符串拆分为字符列表 | list("add") |
['a', 'd', 'd'] |
| 元组转列表(可变修改) | list((1,2,3)) |
[1,2,3] |
| 快速创建有序整数列表 | list(range(5)) |
[0,1,2,3,4] |
| 字典提取键列表 | list({"name":"Tom", "age":20}) |
['name', 'age'] |
| 生成器转为列表(重复访问) | list((x*2 for x in [1,2,3])) |
[2,4,6] |
六、总结
list() 是 Python 中"可迭代对象转列表"的万能工具,核心优势是:
- 简洁高效:一行代码完成转换,无需手动遍历;
- 兼容性强:支持所有可迭代对象,覆盖绝大多数场景;
- 灵活实用:配合列表的可变特性,解决元组、集合、字典等对象的修改需求。
日常开发中,优先用 list() 处理"转换类"需求(如字符串拆分成字符、元组转列表),用 [] 直接创建已知元素的列表,两者结合可高效处理所有列表相关操作。