元组
前面介绍过 Python 的列表概念。列表可以存储不同类型元素的集合,并将它们线性地组织在一起。然而,当我们想要存储的元素数量固定的情况下,虽说列表也能胜任,但未免会导致效率低下。
元组(Tuple) 与列表类似。两者之间的区别在于:元组不能更改,列表可以。也就是说,一旦被分配,就不能从元组中添加、更改或删除元素。
元组 就是一种可以提高存储固定量元素的效率的数据结构。与列表相比,元组有很多优点:
- 通常将元组用于不同的数据类型,将列表用于相同(或相似)的数据类型
- 由于元组不可变,所以遍历元组比列表要快(较小的性能提升)
- 元组可以用作字典的 关键字,而列表不行。因为字典的关键字必须是不可变的,元组本身就是不可变的
- 如果数据不需要更改,将其作为元组来实现,可以确保“写保护”
- 元组可以被用在字符串格式化中
接下来是几个使用元组的例子:
-
t1 = () t2 = (1, 3, 5) # 相当于 list [2, 4, 6, 8] t3 = tuple([2 * x for x in range(1, 5)]) # 相当于 list ['a', 'b', 'c', 'd'] t4 = tuple("abcd")
- 以上的元组一旦确立了其中的元素就不能再进行增删改,只能进行查询,可以沿用列表的中括号下标查询其中的元素
- 除此以外,还可以对元组的元素进行遍历、使用数学函数甚至进行运算等:
-
tuple1 = ("green", "red", "blue") print(tuple1) tuple2 = tuple([7, 1, 2, 23, 4, 5]) print(tuple2) print("length is", len(tuple2)) print("max is", max(tuple2)) print("min is", min(tuple2)) print("sum is", sum(tuple2)) print("The first element is", tuple2[0]) tuple3 = tuple1 + tuple2 print(tuple3) tuple3 = 2 * tuple1 print(tuple3) print(tuple2[2: 4]) print(tuple1[-1]) # 这一行的意思是输出 2 是否是该元组中的一个元素 print(2 in tuple2) for v in tuple1: print(v, end = ' ') print() # 支持元组与列表的相互转换 list1 = list(tuple2) list1.sort() tuple4 = tuple(list1) tuple5 = tuple(list1) print(tuple4) print(tuple4 == tuple5)
集合
集合与列表的不同在于,集合内的元素是不重复且不按特定顺序进行排列的。
可以通过将元素用一对 花括号({}) 括起来以创建一个元素集合。集合中的元素用逗号分隔。可以创建一个空集,或者从一个列表或一个元组创建一个集合,如下面的例子所示:
s1 = set()
s2 = {1, 3, 5}
# 下面这行意味着列表、元组、集合也可以相互转换,需要使用对应的初始化方法
s3 = set((1, 3, 5))
操作和访问集合
- 除了前面讲过的一些数学函数可以对集合进行操作外,向集合添加或删除一个元素可以分别使用 add() 和 remove() 方法:
-
s1 = {1, 2, 4} s1.add(6) s1.remove(4) print(s1)
子集和超集
- 主要可以通过 issubset() 或 issuperset() 方法来判断一个集合是否为另一个集合的子集或超集:
-
s1.issubset(s2) s2.issuperset(s1)
相等性测试
- 可以使用运算符 == 和 != 对集合的相等性进行判定:
-
s1 = {1, 2, 4} s2 = {1, 4, 2} print(s1 == s2) print(s1 != s2)
集合运算
- 集合的运算主要有 并、交、差、对称差,分别用 |、&、-、^ 运算符表示,但也可以用 union()、intersection()、difference()、symmetric_difference() 方法实现:
-
set1 = {"green", "red", "blue", "red"} set2 = set([7, 1, 2, 23, 2, 4, 5]) print("Is red in set1?", "red" in set1) print("length is", len(set2)) print("max is", max(set2)) print("min is", min(set2)) print("sum is", sum(set2)) set3 = set1 | {"green", "yellow"} set3 = set1 - {"green", "yellow"} set3 = set1 & {"green", "yellow"} set3 = set1 ^ {"green", "yellow"} list1 = list(set2) print(set1 == {"green" ,"red", "blue"}) set1.add("yellow") print(set1)
字典
一个字典是按照 关键字 存储值的集合,这些关键字很像下标运算符。
在一个列表中,下标是整数;在一个字典中,关键字必须是一个 可哈希对象。一个字典不能包含有重复的关键字。每个关键字都对应着一个值。一个关键字和它对应的值形成存储在字典中的一个条目(输入域),这种数据结构被称为“字典”。因为它与词典很类似,在这里,单词就相当于关键字而这些单词的详细定义就是相应的值。
创建字典
- 字典的创建可以使用花括号(注意,空花括号默认为空字典,空集合应为 set()),花括号里面的元素都由 关键字: 值 构成:
-
students = {} students = {"111-23-2323": "John", "22-34-3434": "Peter"}
添加、修改、获取值
- 添加一个条目到字典中,直接对下标关键字赋值即可:dictionary[key] = value,若关键字已存在,直接替换旧值
- 删除条目的语法为:del dictionary[key]
- 与此同时,可以对字典中的关键字进行遍历,获取所有元素值
len 函数
- len(dictionary) 返回字典中所有元素的个数
检测关键字
- 检测关键字是否在字典中,使用 in 语法
相等性检测
- 字典是有序的,使用 ==、!= 判定相等或不相等时,会考虑关键字-值的相等以及出现顺序的一致
字典方法
- 以下是其他字典对象的方法及其作用:
-
方法名 作用 keys() 返回一个关键字序列 values() 返回一个值序列 items() 返回一个元组序列,每个元组都是一个条目的(键,值) clear() 删除所有条目 get(key) 返回这个关键字对应的值 pop(key) 删除这个关键字对应的条目并返回它的值 popitem(key) 返回一个随机选择的键值对作为元组并删除这个被选择的条目