11 - 元组、集合和字典

1.元组

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

示例:

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

一些元组的操作:

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

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

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

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

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

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

from CircleFromGeometricObject import Circle
circles = (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 创建一个 set
s4 = set([x * 2 for x in range(1, 10)]) #从一个 list 创建一个 set
s5 = 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  #返回False
s.remove(4)  #删除一个不存在的元素会返回KeyError

子集和超集:

s1 = {1, 2, 4}
s2 = {1, 4, 5, 2, 6}
s3 = {1, 2, 4}
s1.issubset(s2)  #s1 是否是 s2 的子集,返回 True
s2.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值