主页
文章
分类
标签
关于
python中的list声明
发布于: 2025-8-1   更新于: 2025-8-1   收录于: Python
文章字数: 1252   阅读时间: 3 分钟   阅读量:

前言

在python中list总共有三种定义方法

  • typing.List(Python 3.9+ 推荐用 list
  • 直接写 list
  • 字面量 []

三者的核心区别在于用途场景(类型注解 / 运行时创建)和 语法规范(版本兼容性、类型细化能力),下面分维度详细拆解:

核心

写法 核心用途 运行时是否可执行 类型注解场景是否合规
typing.List 旧版类型注解(泛型列表) ×(仅注解) 3.5-3.8 合规
list 新版类型注解/运行时创建列表 √(创建+注解) 3.9+ 注解合规
[] 运行时创建空列表 √(仅创建) ×(注解会报错)

具体区别

typing.List:Python 3.9 前的泛型类型注解

typing.List 是 Python 3.5 引入类型注解后,专门用于标注列表的泛型类型的工具(属于「类型提示」,不影响运行时)。

特点:

  • 支持细化列表元素类型(泛型):比如 List[int] 表示「元素全是整数的列表」;
  • 仅用于类型注解,不能直接用来创建列表(typing.List() 会报错);
  • Python 3.9 后被官方标记为「过时」,推荐用内置 list 替代。

示例:

1
2
3
4
5
6
7
8
from typing import List  # 3.5-3.8 需导入

# 正确:注解函数参数/返回值
def sum_numbers(numbers: List[int]) -> int:
    return sum(numbers)

# 错误:typing.List 不能创建列表
# lst = List([1,2,3])  # 抛 TypeError

直接写 list:双用途(3.9+ 注解 + 运行时创建)

list 是 Python 内置的列表类型,有两个核心场景:

场景1:运行时创建列表(所有 Python 版本通用)

作为构造函数创建列表,等价于 [],但语义更显式:

1
2
3
4
# 运行时创建空列表(等价于 [])
lst1 = list()  
# 运行时从可迭代对象创建列表
lst2 = list(range(5))  # [0,1,2,3,4]

场景2:3.9+ 类型注解(替代 typing.List

Python 3.9 引入「PEP 585」,允许直接用内置 list 做泛型注解,无需导入 typing

1
2
3
# 3.9+ 推荐写法(无需导入 typing)
def sum_numbers(numbers: list[int]) -> int:  # list[int] 等价于 List[int]
    return sum(numbers)

关键注意:

  • 3.8 及以下版本,list[int] 会报错(仅支持 List[int]);
  • 注解时 list 必须带泛型(如 list[int]),仅写 list 表示「任意类型的列表」。

[]:运行时创建空列表(最常用)

[] 是创建空列表的字面量语法,纯运行时操作,不能用于类型注解。

特点:

  • list() 更简洁、性能略优(字面量是解释器直接优化的);
  • 仅用于创建列表,注解时写 [] 会触发语法错误;
  • 可直接初始化元素:[1,2,3] 是创建带初始值列表的标准写法。

示例:

1
2
3
4
5
6
# 正确:运行时创建列表
lst = []
lst.append(1)  # [1]

# 错误:类型注解中用 []
# def func(lst: []) -> None:  # 3.9+ 会提示语法错误,旧版也不规范

对比总结

  1. 类型注解场景

    • 3.5-3.8:必须用 from typing import List + List[int]
    • 3.9+:推荐用 list[int](无需导入,更简洁);
    • 绝对不要用 [] 做注解。
  2. 运行时创建列表

    • 空列表:优先用 [](简洁、高效),list() 等价但少用;
    • 带初始值:直接用 [1,2,3],或 list(可迭代对象)(如 list(range(5)));
    • 绝对不要用 typing.List() 创建列表(会报错)。
  3. 泛型支持

    • typing.List 和 3.9+ 的 list 都支持泛型(如 List[str]/list[str]);
    • [] 无泛型概念,仅能创建列表实例。

实践

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 3.9+ 推荐写法(注解+创建)
def process_strings(strs: list[str]) -> list[int]:
    # 运行时创建列表:用 []
    result = []
    for s in strs:
        result.append(len(s))
    return result

# 3.5-3.8 兼容写法
from typing import List
def process_strings(strs: List[str]) -> List[int]:
    result = []
    for s in strs:
        result.append(len(s))
    return result