元组与集合
约 10 分钟
元组是上了锁的列表:第一章的列表可以随时 append、pop,元组用圆括号定义——point = (3, 4)——定义完就不能改。听起来像缺点,其实是保护:坐标、日期、版本号这种「改了就是错」的数据,用元组最安心。试图改它会直接报错,bug 在第一时间暴露。
什么时候用元组:函数一次返回好几个值时,返回的其实就是元组——divmod(7, 2) 返回 (3, 1),商和余数一起给。解包写法 a, b = (3, 1) 把两个值分别装进 a 和 b,一行搞定。
集合是自动去重的篮子:s = {1, 2, 2, 3} 实际只存 {1, 2, 3},重复自动消失。它的绝招是「查在不在」——'apple' in fruits 飞快,因为集合内部像字典索引而不是排队翻找。统计一篇文章用了多少个不同的词,一个 set 就够。
集合还能算交并差:a & b 是两个集合都有的(交集),a | b 是合起来(并集)。「既学钢琴又学围棋的同学」,一行 a & b 就筛出来了——这就是数学课集合运算的 Python 版。
怎么选:顺序重要、会变的用列表;固定不变的组合用元组;只看「有哪些、在不在」用集合。
常见误区:用列表做成员判断——x in big_list 要逐个翻,数据上万就明显变慢,换 set 立刻快起来。
练一练:用集合统计 'mississippi' 里有几个不同的字母(提示:set('mississippi') 再 len)。
小纸条
用集合统计一个英文单词里有几种不同的字母
登录 后可看答案