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.比较集合和列表的性能
- 下标访问:列表支持,集合不支持
- 对于
in
和not 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