list()函数完全指南:用法、场景与实战

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 中"可迭代对象转列表"的万能工具,核心优势是:

  1. 简洁高效:一行代码完成转换,无需手动遍历;
  2. 兼容性强:支持所有可迭代对象,覆盖绝大多数场景;
  3. 灵活实用:配合列表的可变特性,解决元组、集合、字典等对象的修改需求。

日常开发中,优先用 list() 处理"转换类"需求(如字符串拆分成字符、元组转列表),用 [] 直接创建已知元素的列表,两者结合可高效处理所有列表相关操作。

相关推荐
獭.獭.10 小时前
C++ -- STL【list的使用】
c++·stl·list
曹牧10 小时前
Java中使用List传入Oracle的IN查询
java·oracle·list
2301_7890156210 小时前
C++:list(带头双向链表)增删查改模拟实现
c语言·开发语言·c++·list
阿沁QWQ11 小时前
list模拟实现
数据结构·list
青春不流名1 天前
Java List初始化的例子
java·windows·list
HONG````1 天前
鸿蒙List组件深度使用指南:从数据绑定到极致性能优化
list·harmonyos
geekmice1 天前
在单线程环境下,同一个 Service 中多个方法需要复用某个 List
数据结构·windows·list
程序员-周李斌2 天前
ArrayList 源码深度分析(基于 JDK 8)
java·开发语言·数据结构·算法·list
程序员-周李斌3 天前
LinkedList 源码深度分析(基于 JDK 8)
java·开发语言·数据结构·list