元组
元组被称为只读列表,即元素可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组。
元组写在小括号(())里,元素之间用逗号隔开。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
1 tup1 = () # 空元组 2 tup2 = (20,) # 一个元素,需要在元素后添加逗号
虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表:儿子不能改,孙子可以改,如
tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') // 元组中的各个元素 1,2,3,'alex',[2,3,4,'taibai'],'egon' 是可变对象,整体不能修改。虽然列表 [2,3,4,'taibai']整体不能修改,但是列表中的元素可以修改
tu[4][3] = tu[4][3].upper()
tu[4].append('sb')
作用:
1 对于一些数据我们不想被修改,可以使用元组;
2 另外,元组的意义还在于,元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。
1 #__author: Administrator 2 #date: 2016/8/23 3 4 5 product_list=[ 6 ('Mac',9000), 7 ('kindle',800), 8 ('tesla',900000), 9 ('python book',105), 10 ('bike',2000), 11 12 ] 13 saving=input('please input your money:') 14 shopping_car=[] 15 if saving.isdigit(): 16 saving=int(saving) 17 while True: 18 #打印商品内容 19 for i,v in enumerate(product_list,1): 20 print(i,'>>>>',v) 21 22 #引导用户选择商品 23 choice=input('选择购买商品编号[退出:q]:') 24 25 #验证输入是否合法 26 if choice.isdigit(): 27 choice=int(choice) 28 if choice>0 and choice<=len(product_list): 29 #将用户选择商品通过choice取出来 30 p_item=product_list[choice-1] 31 32 #如果钱够,用本金saving减去该商品价格,并将该商品加入购物车 33 if p_item[1]<saving: 34 saving-=p_item[1] 35 36 shopping_car.append(p_item) 37 38 else: 39 print('余额不足,还剩%s'%saving) 40 print(p_item) 41 else: 42 print('编码不存在') 43 elif choice=='q': 44 print('------------您已经购买如下商品----------------') 45 #循环遍历购物车里的商品,购物车存放的是已买商品 46 for i in shopping_car: 47 print(i) 48 print('您还剩%s元钱'%saving) 49 break 50 else: 51 print('invalid input')
查找:
a=(1,2,3,4)
print(a[1]) #2
print(a[1:3]) #(1,2)
字典
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
不可变类型:数字、字符串、元组;
可变类型:列表、字典。(可变类型和不可变类型的区别在于是否可以对内存地址对应的值进行直接的修改)
创建字典:
1 dic1={'name':'alex','age':36,'sex':'male'} 2 dic2=dict((('name','alex'),('age',36))) 3 print(dic1) 4 print(dic2)
对应操作:
增:
1 dic3={} 2 3 dic3['name']='alex' 4 dic3['age']=18 5 print(dic3)#{'name': 'alex', 'age': 18} 6 #setdefault有返回值,返回值即键对应的值 7 a=dic3.setdefault('name','yuan') #首先会去找键是否存在,键如果存在就不会对原来的进行修改,并返回字典中相应键对应的值 8 b=dic3.setdefault('ages',22) #键如果不存在就在字典中添加新的键值对,并返回相应的值 9 print(a,b) #alex 22 10 print(dic3) #{'name': 'alex', 'age': 18,'ages':22}
查:提供键来查找
1 dic3={'name': 'alex', 'age': 18} 2 print(dic3['name']) #alex 键不存在会报错 3 print(dic3.get('age',False)) #18 键如果不存在则返回False即自定义报错返回值 4 print(dic3.items()) #dict_items([('name', 'alex'), ('age', 18)]) 5 print(type(dic3.items())) #6 print(dic3.keys()) #dict_keys(['name', 'age']) 7 print(type(dic3.keys())) # 8 print(dic3.values()) #dict_values(['alex', 18]) 9 print(list(dic3.values())) #[18, 'alex'] 转化成列表形式 10 print(type(dic3.values())) #
for i in dic3:
print(i) 输出的是键
for i in dic3.keys():
print(i) 输出的是键
for i in dic3.values():
print(i) 输出的是值
for i in dic3.items():
print(i) 以元组的形式输出各个键值对
输出:
('name', 'alex')
('age',18)
for k,v in dic3.items():
print(k,v)
输出:
name alex
age 18
for i in dic3
print(i) 打印的是键
改:
1 dic3={'name': 'alex', 'age': 18} 2 dic3['name']='alvin' 3 dic4={'sex':'male','hobby':'girl','age':36} 4 dic3.update(dic4) 5 print(dic3) #{'sex': 'male', 'age': 36, 'hobby': 'girl', 'name': 'alvin'}
删:
del:删除字典中指定的键值对,无返回值,键不存在会报错。
1 dic4={'name': 'alex', 'age': 18,'class':1} 2 del dic4['name'] 3 print(dic4) #{'age': 18, 'class': 1}
4 del dic4 //在内存中删除字典
5 print(dic4) //NameError:name 'dic4' not defined.
clear:清空字典,空字典
1 dic4={'name': 'alex', 'age': 18,'class':1} 2 dic4.clear() 3 print(dic4) #{}
pop:删除字典中指定的键值对,有返回值,如果键不存在会报错
1 dic4={'name': 'alex', 'age': 18,'class':1} 2 print(dic4.pop('age')) #18 3 print(dic4) #{'name': 'alex', 'class': 1}
如果键不存在会报错。
dic4.pop('二哥',None) //键存在则直接删除。如果键不存在,则返回None
popitem:随机删除一个键值对,有返回值
1 dic4={'name': 'alex', 'age': 18,'class':1} 2 a=dic4.popitem() 3 print(a,dic4) #('age', 18) {'class': 1, 'name': 'alex'}
其他操作以及涉及到的方法:
1.dict.fromkeys()
1 d1=dict.fromkeys(['host1','host2','host3'],'Mac') 2 print(d1) #{'host3': 'Mac', 'host1': 'Mac', 'host2': 'Mac'} 3 d1['host1']='xiaomi' #修改 4 print(d1) #{'host2': 'Mac', 'host1': 'xiaomi', 'host3': 'Mac'} 5 ###################################################################### 6 d2=dict.fromkeys(['host1','host2','host3'],['Mac','huawei']) 7 print(d2) #{'host3': ['Mac', 'huawei'], 'host1': ['Mac', 'huawei'], 'host2': ['Mac', 'huawei']} 8 d2['host1'][0]='xiaomi' 9 print(d2) #{'host1': ['xiaomi', 'huawei'], 'host2': ['xiaomi', 'huawei'], 'host3': ['xiaomi', 'huawei']}
2. d.copy() 对字典 d 进行浅复制,返回一个和d有相同键值对的新字典
3.字典的嵌套
1 av_catalog = { 2 "欧美":{ 3 "www.youporn.com": ["很多免费的,世界最大的","质量一般"], 4 "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], 5 "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], 6 "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"] 7 }, 8 "日韩":{ 9 "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"] 10 }, 11 "大陆":{ 12 "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"] 13 } 14 } 15 16 av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来" 17 print(av_catalog["大陆"]["1024"]) #['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来'] 18 19 av_catalog["欧美"]["www.youporn.com"][1]='高清'
4.sorted(dict):返回一个有序的包含字典所有key的列表
1 dic={5:'555',2:'222',4:'444'} 2 print(sorted(dic)) #[2, 4, 5]
5.字典的遍历
1 dic5 = {'name': 'alex', 'age': 18} 2 3 for i in dic5: #循环遍历键 4 print(i) 5 #输出 6 # name 7 # age 8 9 for i in dic5: #循环遍历键 10 print(i,dic5[i]) 11 #输出 12 # name alex 13 # age 18 14 15 for keys,values in dic5.items(): 16 print(keys,values) 17 #输出 18 # name alex 19 # age 18 20 21 for items in dic5.items(): 22 print(items) 23 #输出 24 # ('age', 18) 25 ('name', 'alex')
还用我们上面的例子,存取这个班学生的信息,我们如果通过字典来完成,那:
1 dic={'zhangsan':{'age':23,'sex':'male'}, 2 '李四':{'age':33,'sex':'male'}, 3 'wangwu':{'age':27,'sex':'women'} 4 }