一、元组:俗称不可变的列表,又被称为只读列表。元组用小括号括起来,里面可以放任何数据类型的数据,查询可以,循环也可以,切片也可以,但就是不能修改。
注意:如果元组中只有一个元素,一定要加一个逗号,否则就不是元组。
>>> tu = (1,"Tanxu","A") #创建一个元组,用小括号括起来 >>> type(tu) <class 'tuple'> >>> tu1 = ("Tanxu")#当小括号内只有一个元素时,不是元组 >>> type(tu1) <class 'str'> >>> tu2 = ("Tanxu",)#元组只有一个元素时,要在该元素后加一个逗号 >>> type(tu2) <class 'tuple'> >>> tu3 = ()#定义一个空元组 >>> type(tu3) <class 'tuple'>
注意:关于不可变,这里元组不可变的意思是子元素不可变【即元组没有修改操作】,而子元素内部的子元素可以改变,这取决于子元素是否是可变对象。【但是元组本身没有改变】
>>> tu[2] = "Tan" #对元祖进行修改会报错 Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> tu[2] = "Tan" TypeError: 'tuple' object does not support item assignment >>> tu4 = ("Tan","xu",[89,93,94]) >>> tu4[2][2] = 98 #可以对元素中子元素的子元素进行修改 >>> tu4 ('Tan', 'xu', [89, 93, 98])
元组也有count、index、len等操作,用法同列表
二、字典:字典是以{}括起来的,内部使用key:value的形式来保存数据。如{“jay”:”周杰伦”,”jj”:”林俊杰”}
注意:字典的key必须是可哈希的,不可变的【列表是不可哈希的】
补充:什么是可哈希的(hashable)不该改变的(imutable)?【来自官方文档翻译】
如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的,那么它就是可哈希的(hashable)的,因为这些数据结构内置了哈希值,每个可哈希的对象都内置了__hash__方法,所以可哈希的对象可以通过哈希值进行对比,也可以作为字典的键值和作为set函数的参数。所有python中所有不可改变的的对象(imutable objects)都是可哈希的,比如字符串,元组,也就是说可改变的容器如字典,列表不可哈希(unhashable)。我们用户所定义的类的实例对象默认是可哈希的(hashable),它们都是唯一的,而hash值也就是它们的id()。
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> type(dic1) <class 'dict'>
1、字典的相关操作:
1)增加:
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> dic1['height'] = 160 #直接添加,如果key重复了,会替换掉原来的value >>> dic1 {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': 160} >>> dic1.setdefault('weight',45)#使用setdefault()添加元素时,返回的是value值;如果字典中存在了这个key,则不再进行保存操作 45 >>> dic1 {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': 160, 'weight': 45}
2)删除:
>>> dic1.pop("weight")#删除一个元素,会返回这个元素对应的value值 45 >>> dic1.popitem()#删除一个元素,返回这个元素的key和value,返回的是一个元组。默认删除最后一个元素 ('height', 160)
>>> dic1.clear()#清空字典
>>> dic1
{}
3)查询:
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> dic1['name'] #如果key值存在,会返回其对应的value值;如果key值不存在,程序会报错 'Tanxu' #get方法:1)可以通过key值获取value的值,如果key不存在,默认返回None >>> print(dic1.get("Tanxu")) None >>> print(dic1.get('name')) Tanxu #2)如果设置了默认返回值,则当key不存在时,返回该默认值 >>> print(dic1.get('height','160')) 160 #setdefault操作==》1、首先判断原来的字典中有没有这个key,如果没有则执行添加 # 2、用这个key去字典中查询,返回查到的结果 >>> ret1 = dic1.setdefault("name",1) >>> print(ret1) Tanxu >>> ret2 = dic1.setdefault("height",160) >>> print(ret2) 160
4)d1.update(d2) ==》把d2的k-v更新到d1中
>>> dic1 = {'name':'Tanxu','sex':'女','age':18} >>> dic2 = {"height":"160","weight":"45"} >>> dic1.update(dic2) >>> dic1 {'name': 'Tanxu', 'sex': '女', 'age': 18, 'height': '160', 'weight': '45'}
2、字典的其他相关操作
1)得到字典中的key,value以及键值对
print(dict1.keys()) #拿到所有的key,返回key的集合,该集合可迭代循环 ##for key in dict1.keys(): #循环遍历key值 ## print(key) print(dict1.values()) #拿到所有的value,返回value的集合,该集合可迭代循环 ##for value in dict1.values(): #循环遍历value值 ## print(value) print(dict1.items()) #拿到所有的键值对,每一项都是元组,元组集合也可迭代 ##for item in dict1.items():#循环遍历key:value键值对 ## print(item)#返回元组 ## print(item[0]) #返回key ## print(item[1]) #返回value
#遍历字典
for k,v in dic1.items():
print(k)
print(v)
2)解构,解包
##解构 解包 a,b = (1,2) #即把a赋值为1,b赋值为2 print(a)
3)字典的嵌套
dic = { "name":"Tanxu", "age":"19", "hobby":"listen music", "frend1":{ "name":"李四", "age":"22", "hobby":"writting" }, "frend2":{ "name":"王五", "age":"19", "hobby":"singing" } } print(dic["frend1"]["name"])
三、range操作(迭代循环)
语法:
range(开始,结束,步长)默认开始可以取到,结束取不到,步长可以为负数
实例:
1、循环:for i in range(10): #打印0 - 9 Print(i) 2、循环:for i in range(3,9): #打印3 - 8 Print(i) 3、循环:for i in range(3,10,2): #打印3,5,7,9 Print(i) 4、循环:for i in range(10,1,-1): #打印10,9,8,7,6,5,4,3,2 Print(i) 5、循环:for i in range(10,-10,-1): #打印10,9,8,7,6,5,4,3,2,1,0,-1,-2,……,-9 Print(i)