【Python】二维列表该怎么优雅注解-搞懂List[Tuple]


今天在定义一个二维列表的变量类型时,发现了一个不理解的事情。


案发情景

需要定义的变量如下:
来看变量本体:

series = [
	[0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0],
	[1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [1, 6, 0],
	[2, 0, 1], [2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0], [2, 6, 0],
]

这个变量的格式:嵌套二维列表,最内层的列表包含三个元素,int类型。
第一感觉应该将变量定义为 List[List[int]] ,但是这样并不能凸显出内层列表的元素个数,故上网查了查GPT,GPT老师回答,应该定义为List[Tuple[int, int, int]]

👉疑惑: List和Tuple在python中是两种不同的数据类型,为什么可以这样定义?


取证

list:

✅特点

  • 可变:创建后可以修改元素(添加、删除、更新)。
  • 有序:元素有明确的顺序,可以通过索引访问。

📌常用场景:

  • 存储一批可以变化的数据。
  • 需要频繁修改、排序、追加的情况。
tuple:

✅特点:

  • 不可变:创建后不能更改元素

  • 有序:和列表一样有顺序,可以索引访问。

📌常用场景

  • 表示结构化、固定格式的数据,如坐标、数据库行、键值对。

    (每个字段具有特定的意义的记录)

  • 用作字典的键(因为元组可哈希,但列表不行)。

    temperature_map = {
        (0, 0): 25,
        (1, 0): 28,
        (0, 1): 22,
    }
    
特性listtuple
可变性✅ 可变(可增删改)❌ 不可变(定义后不能改)
语法[1, 2, 3](1, 2, 3)
适合场景存储任意元素的可变序列表示结构化、定长、不可变数据
是否可哈希❌ 不可哈希,不能当字典的键✅ 可哈希,可作为字典键、集合元素
示例用途存储用户列表、动态数组等坐标点(x, y),数据库行结构等每个位置有特定含义的数据

💡总而言之,若是值用来表示一个固定结构的记录,推荐用tuple。如果要对元素做增删改查,用list更合适。

结论

虽然实际数据依旧是用列表存储的(List[List[int]] 和 List[Tuple[int, int, int]] 在运行时都不影响),但:

类型注解的语义 层面,Tuple 明确表示:这个内层结构是一个定长、结构化的记录;

实际开发中,这种表达方式更有利于后期维护和理解;

由于此处定义变量类型,仅仅是为了标明数据的格式,以防出现乱七八糟的数据,所以采用List[Tuple[int, int, int]]更合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值