You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结合Leetcode代码示例,Python中导入typing.List的作用是什么?

两段代码说明

第一段是无类型提示的标准实现,逻辑为遍历有序数组,原地删除重复元素:

class Solution():
    def removeDuplicates(self, nums):
        i = 0
        while i < len(nums)-1:
            if nums[i] == nums[i+1]:
                del nums[i]
            else:
                i += 1

        return (len(nums), nums)

numbers = [1, 1, 1, 3, 4, 5, 5, 5, 5, 7, 7, 7, 9, 9]
some_object = Solution()
ask_me = some_object.removeDuplicates(numbers)
print (ask_me)

这段代码完全符合题目要求,运行后会输出去重后的数组长度和数组本身。要注意的是Leetcode原题只要求返回去重后的数组长度,这里返回元组是为了方便本地调试查看结果。

第二段是添加了类型提示的版本,唯一区别是给removeDuplicates方法的参数和返回值加了类型标注:

from typing import List

class Solution(object):
    def removeDuplicates(self, nums: List[int]) -> int:
        i = 0
        while i < len(nums)-1:
            if nums[i] == nums[i+1]:
                del nums[i]
            else:
                i += 1

        return (len(nums), nums)

numbers = [1, 1, 1, 3, 4, 5, 5, 5, 5, 7, 7, 7, 9, 9]
some_object = Solution()
ask_me = some_object.removeDuplicates(numbers)
print (ask_me)

注意这段代码的类型标注存在小问题:标注的返回值类型是int,但实际返回的是包含长度和数组的元组,不过因为类型提示不参与运行逻辑,所以代码依然可以正常执行。

typing模块List的作用

Python是动态类型语言,运行时不会强制校验变量类型,哪怕你给nums传一个字符串、字典,只要运行时逻辑能走通就不会报错,这种特性虽然灵活,但在大型项目、多人协作场景下很容易出现隐藏的类型错误。typing模块提供的类型标注就是为了解决这个问题,其中List的作用如下:

  • 用来标注列表类型的参数/返回值,且明确指定列表内的元素类型,比如List[int]就表示该参数必须是元素全为整数的列表,List[str]就表示元素全为字符串的列表
  • 类型标注仅用于静态检查,不会对运行效率产生任何影响,也不会限制运行时的参数类型,所以你加了List[int]标注之后,代码依然可以正常运行
  • 静态检查工具(比如PyCharm等IDE自带的检查工具、mypy)可以根据类型标注提前发现类型错误:比如你给标注了List[int]的nums参数传了一个字符串列表,IDE会直接标红提醒,不用等到代码运行到对应位置才发现问题
  • 可以提升代码可读性:其他开发者不用通读函数内部逻辑,只要看参数的类型标注就知道需要传什么类型的参数;同时IDE可以基于类型标注给出更准确的代码补全提示,提升开发效率

内容的提问来源于stack exchange,提问作者Olgierd Wiśniewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 23:06:06