11 - 元组、集合和字典

来源:互联网 发布:wps两个表格数据对比 编辑:程序博客网 时间:2024/05/22 07:59

1.元组

  • 与列表类似,但是元组中的元素是固定的。也就是说,一个元组一旦被创建,就无法对其元素进行添加、删除、替换或重新排序。
  • 可以使用元组来防止数据被以外的修改。除元组的数据固定以外,其他方面和列表很像,甚至比列表效率更高。
  • 可以通过将元素用一对圆括号括起来创建一个元组

示例:

t1 = ()t2 =(1, 3, 5)t3 = tuple([2 * x for x in range(1, 5)])t4 = tuple("abc")

一些元组的操作:

t3 = t1 + t2t3 =2 * t3print(t3[2:4])l1 = list(t2)      #从tuple创建一个listt5 = tuple(l1)

我们看到这里 t3 被两次赋值,之前说过tuple不能被修改,那么这里不会抛出一个异常吗?

其实 tuple是一个不可变对象,跟之前讲过的 str, int, float等类似。这便是它与 list 的最大区别。

以上的语句并没有错误,因为重新建立了一个一个新的元组给变量 t3 ,原来的元组在内存中并没有消失。

不可变对象的特点在于不能给它添加、删除和替换元组及打乱其中的元素

注意虽然元组是不可变对象,但是如果元组中存放的是可变对象,那么这个可变对象仍然是可变的。

from CircleFromGeometricObject import Circlecircles = (Circle(2), Circle(4), Circle(7))circles[0].setRadius(30)circles[0].getRadius()

2.集合

集合与列表类似,属于可变对象,但是集合中的元素是不重复且不按特定顺序放置的的

如果你的程序不关心元素的顺序,使用一个集合来存储数据比使用列表效率更高。

s1 = set()s2 = {1, 3, 5}s3 = set((1, 3, 5))   #从一个 tuple 创建一个 sets4 = set([x * 2 for x in range(1, 10)]) #从一个 list 创建一个 sets5 = set("abac")   #a在集合中实际只出现了一次

一个集合可以包含不同类型的元素,例如:

s = {1, 2, 3, "one", "two", "three"}

集合的操作和访问:

s = {1, 2, 4}s.add(6)len(s)max(s)sum(x)3 in s  #返回Falses.remove(4)  #删除一个不存在的元素会返回KeyError

子集和超集:

s1 = {1, 2, 4}s2 = {1, 4, 5, 2, 6}s3 = {1, 2, 4}s1.issubset(s2)  #s1 是否是 s2 的子集,返回 Trues2.issuperset(s1) #s2 是否是 s1的超集s1 == s2  #判断两个集合是否相等

集合运算:

s1 = {1, 2, 4}s2 = {1, 3, 5}s1.union(s2)    #并集s1 | s2    #同上,并集s1.intersection(s2)    #交集s1 & s2    #同上,交集s1.difference(s2) #差集s1 - s2    #同上,差集s1.symmetric_difference(s2)    #异或,除共同元素之外的元素s1 ^ s2    #同上,异或

3.比较集合和列表的性能

  • 下标访问:列表支持,集合不支持
  • 对于 innot in运算符和 remove 方法,集合比列表的效率更高

4.字典

字典是一个存储键值对集合的容器对象,它通过关键字实现快速获取、删除和更新值。一个字典不能包含重复的关键字。每个关键字和它对应的值形成存储在字典中的一个条目。与字典很类似。

创建

stu = {}stu = {"111-34-3434":"John", "132-56-6290":"Peter"}

添加、修改和访问:

stu["234-56-9190"] = "Susan"   #如果关键字已经存在的话,将会修改之前的值print(stu["234-56-9190"])

删除:

del stu["234-56-9190"]

遍历字典:

for key in stu:    print(key + ":" + str(stu[key]))

其他操作:

len(stu)"234-56-9190"  in stu    #判断关键字是否在字典中d1 = {"red":41, "blue":3}d2 = {"blue":3, "red":41}d1 == d2    #判断是否相等

字典内置的方法:

  • keys() 返回关键字序列
  • values() 返回值序列
  • items() 返回键值对
  • clear() 删除所有条目
  • get(key) 返回关键字对应的值
  • pop(key) 删除指定条目并返回其值
  • popitem() 随机pop
0 0
原创粉丝点击