编程学习网 > 编程语言 > Python > 说实话,大多数人学 Python 都把这几个内置数据结构用错了!
2026
08-18

说实话,大多数人学 Python 都把这几个内置数据结构用错了!


说实话,大多数人学 Python 都把这几个内置数据结构用错了。

我当老师这些年,见过太多学生写出来的代码。明明 python 给了你便利,结果很多人硬是把它用成了 C 语言或者 Java。尤其是那几个最基础的数据结构,用错的频率高到让人头疼。

先说列表。很多人拿列表当万能容器。存数据用列表,遍历也用列表。比如要记录一个班级的成绩,他们写 scores = [],然后一个个 append 进去。最后要查某个学生的分数,就 for 循环挨个比。这没问题,但效率低。如果你需要根据名字查分数,字典才是对的工具。字典的查找速度是 O(1),列表是 O(n)。数据少感觉不到,数据一多就能看出来。

字典被误用的更厉害。很多人把字典当成一个普通的键值对存储,忘了它能做的事。比如统计词频,大多数人会写成这样:初始化一个空字典,然后判断 key 在不在,在就加一,不在就赋值为 1。这写起来麻烦,运行也慢。python 自带 collections.defaultdict 或者 Counter,一行代码解决。但很多学生就是不知道,或者知道了也不用。

集合被用的最少,但用错的最明显。集合是个好东西,去重、交并差集运算,省事又高效。可有的人偏不用。比如要从两个列表里找出共同元素,他们写两层 for 循环。代码又臭又长,还容易出错。其实只要把其中一个转成集合,用交集运算符 & 就搞定了。集合比列表快很多,因为底层是哈希表。

元组几乎被当成废物。有人觉得元组跟列表差不多,就是不能改,所以懒得用。这种想法很可惜。元组有个特性叫不可变,这意味着它可以作为字典的键。列表不行,因为列表可变。比如你要用坐标点 (x, y) 当键来存储地图数据,元组才是正解。还有,元组比列表占内存少,生成速度也更快。数据固定不变的场合,优先用元组。

还有一个坑是字符串。字符串不是列表,虽然你可以用索引取值,但它不可变。有人喜欢用加号拼接字符串,比如 result = result + new_string。这个操作在循环里特别慢,因为每次拼接都要创建新字符串对象。正确的做法是用 join 方法,或者先放列表里最后 join。这两种方式效率高很多。

很多人学 python 只学了语法,没学风格。python 的哲学是用一种最好的方式做事。比如列表推导式,看起来简单,但有人觉得不好读就拒绝用。其实列表推导式不仅快,而且代码更紧凑。比如把字符串列表转成大写,[s.upper() for s in words] for 循环清晰多了。

我见过最离谱的一个学生,写了一个排序算法自己手动实现快排。python 内置的 sorted 方法和 list.sort 方法,底层是 Timsort 算法,又快又稳。你手写的能在性能上打败它吗?很难。没必要重复造轮子,除非你是为了学习。

最后说一点。用错数据结构,代码跑得慢,改起来费劲。但更严重的是,错误的用法会让你养成坏习惯。一开始觉得没关系,等代码量上来了,问题就爆发了。每一次查资料,每一次写代码,都问问自己:这个场景用哪个数据结构最合适?答案往往不是那个你最熟悉的,而是那个最朴素的。字典就是字典,集合就是集合,别把它们当列表用。

以上就是“说实话,大多数人学 Python 都把这几个内置数据结构用错了!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取