今天学习了列表、元组相关的知识:与C中的数组列表相似,元组为只读列表:
以及切片相关操作:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #元组,列表 5 names=['zy','gy','xp',['2r','t3','t4'],'lh','xc'] 6 print(names) 7 print(names[0],names[2]) 8 print(names[1:3])#切片左往右 9 print(names[2])#切片 10 print(names[-1])#切片从后开始取 11 print(names[-2:])#切片左往右最后的省略 12 print(names) 13 names.append('lh')#追加 14 print('追加后;',names) 15 names.insert(3,'crh')#插入位置 16 print('插入位置后:',names) 17 names[2]='ggy'#修改 18 print('修改后:',names) 19 del names[2] 20 print('删除后:',names) 21 print('统计个数:',names.count('lh'))#统计内空个数 22 names_id=names.index('gy')#内容所在的下标 23 names_user=names[names.index('gy')]#下标所对应的内容 24 print(names_user) 25 print(names_id) 26 #names.clear()#清空列表 27 print('原序列打印:',names) 28 names.reverse()#反转列表 29 print('反转序列打印:',names) 30 #names.sort()#排号序默认为ACSII码表 31 print('排号后打印:',names) 32 33 names2=[1,2,3,4,5,6] 34 names.extend(names2)#合并names2列表 35 print('合并后打印:',names) 36 print('第二列表:',names2) 37 import copy 38 names3=copy.deepcopy(names)#完全COPY 39 #names3=names.copy()#复制names列表 赋于names3 浅复制 子列表为指针地址 40 print('列表3',names3) 41 print('列表1',names) 42 names3[0]='修改1' 43 names3[3][1]='修改二层' 44 print('列表3',names3) 45 print('列表1',names) 46 for i in names: 47 print (i) 48 for i in range(names.__len__()):#__len__列表元素个数(长度) 49 if names[i]=='crh': 50 print(names[i]) 51 print(i) 52 # for i in range(1,names.__len__(),2): 53 # print(i) 54 print(names[0:-1:2])#开始位 结束位 步长() 55 print(names[::2])#0和-1可以省略不写
import copy 浅层与深层COPY
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import copy 5 person=['name',['财务部','办公在六层']] 6 p1=copy.copy(person)#浅COPY 7 p2=person[:]#浅COPY 8 p3=list(person)#浅COPY 9 p1[0]='颜' 10 p2[0]='陈' 11 p3[0]='张' 12 person[1][1]='办公室改到七层' 13 print(person,p1,p2,p3)
最后是字符串相关的操作:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #字符串操作 5 name="my name is {name} and age is {year}!" 6 name_1="Abc123AA bbr" 7 name_2=" " 8 names=name.format(name="calmyan",year=35)#格式化字符 9 print(names) 10 print(names.count("m"))#统计该字符串中指定字符的个数 11 print("添加TAB键的数量",names.expandtabs(tabsize=70))#添加TAB键的数量 12 print(name.endswith("!"))#判断是否以指定字符结尾 13 print(names.find("n"))#返回字符所在索引 14 print(names[names.find("n"):names.find("!")])#返回字符所在索引,可进行切片操作 15 print("判断类:") 16 print("是否是在字母大小写和数字之间的范围:",name_1.isalnum())#是否是在字母大小写和数字之间的范围 17 print("是否是在字母大小写之间的范围:",name_1.isalpha())#是否是在字母大小写之间的范围 18 print("是否是在十进制整数的范围:",name_1.isdecimal())#是否是在十进制整数的范围 19 print("是否是在整数的范围:",name_1.isdigit())#是否是整数的范围 20 print("是否是在整数的范围:","123".isnumeric())#是否是整数的范围 21 print("是否是空格:",names.isnumeric())#是否是空格 22 print("是否是大写开头:",name_1.istitle())#是否是大写开头 23 print("是否是全为大写:",name_1.isupper())#是否是全为大写 24 print("指定字符对字符串进行分割(每个字符):") 25 print(" ".join(names))#用指定字符对字符串进行分割,包括空格 26 print(names.ljust(50,"*"))##指定该字符串的长度,不足用指定字符右端补齐 27 print(names.rjust(50,"*"))##指定该字符串的长度,不足用指定字符左端补齐 28 print(name.center(50,"="))#指定该字符串的长度,不足用指定字符两端补齐,字符串居中 29 p=str.maketrans("abcdefg","1234567")#两个字符串进行一一对应替换 30 print(p) 31 print("gfedcba".translate(p))#传入将会显示对应的字符 32 print("对指定字符进行替换:",name_1.replace("A","a"))#对指定字符进行替换,可选定数量,参数不填默认为全部 33 print("对指定字符进行替换:",name_1.replace("A","a",2))#对指定字符进行替换,可选定数量 34 print("查找最右边的指定字符:",name_1.rfind("3"))#查找最右边的指定字符,返回索引下标 35 print("按指定字符进行分割:",name_1.split("3"))#按指定字符进行分割,字符串中指定字符去除 36 print("按换行进行分割:",name_1.splitlines())#按换行进行分割 37 print("字母大小写互换:",name_1.swapcase())#字母大小写互换 38 print("首字母大写:",name_1.title())#首字母大写 39 print(name_2.zfill(5))#指定字符串长度,不足左边用0补位 二进制运算
模拟购物车
分享出来,共同进步!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 #name_char=int(input("请输入工资(购物资金):"))#用户输入工资(购物资金) 5 #商品列表 6 goodsname=[('手机',2300), 7 ('笔记本电脑',3500), 8 ('平板电视',3900), 9 ('电冰箱',1300),('电磁炉',500) 10 ] 11 #goodsname=['1',] 12 #购物车列表 13 shoplist=[] 14 #购物统计 15 shop_count=0 16 #用户列表 17 #user_shoplist=['用户名'] 18 while True: 19 name_char=input("请输入工资(购物资金):")#用户输入工资(购物资金) 20 if name_char.isdigit():#检测输入是否为整数 21 name_char=int(name_char)#转为int 22 break 23 else: 24 print('金额不能为0或负数请正确输入金额!') 25 continue 26 while True: 27 #for i in goodsname: 28 for index,item in enumerate(goodsname):#取出下标输出 29 print(index,item) 30 #print(goodsname.index(i),i) 31 # break 32 user_index=input('请输入商品编号添加你所在购买的商品,按用 33[31;1mq/Q 33[0m退出>>>:') 33 if user_index.isdigit(): 34 user_index=int(user_index) 35 if user_index < len(goodsname) and user_index>=0:#判断所选商品编号在在列表 36 p_item=goodsname[user_index]#读取下标所在(元素)商品 37 if p_item[1]<=name_char:#余额是否足够 38 shoplist.append(p_item)#添加到购物车 39 name_char-=p_item[1]#扣除金额 40 shop_count+=p_item[1]#累加购物金额 41 # print(type(name_char)) 42 #print(shop_count) 43 print("添加 %s 到购物车,你的购物金额余 33[31;1m%s 33[0m 元"% p_item,name_char) 44 else: 45 print("你的购物金额余 33[41;1m%s 33[0m 元,无法购买该商品" % name_char) 46 else: 47 print('输入错误,该编号 %s的商品不存在!',user_index) 48 elif user_index=='q'or user_index=='Q': 49 for up in shoplist:#打印购物清单 50 print('你的购物清单:',up) 51 print("你的购物总金额为: 33[32;1m%s 33[0m 元!"% shop_count) 52 print("你的购物金额余: 33[31;1m%s 33[0m 元!" % name_char) 53 while True: 54 confirm=input('你是否确定退出购物?Y/y是 N/n否:') 55 if confirm== 'Y' or confirm== 'y': 56 exit(print("谢谢!欢迎您再次光临!")) 57 elif confirm=='N'or confirm== 'n': 58 break 59 else: 60 print("输入错误!请按提示输入!") 61 continue 62 else: 63 print('输入商品编号错误,请重新输入!')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎 2 # 3 #列表、元组操作 4 # ' ' 在python里 ' ' 里的内容为 '字符串' 。不加 ' ' 为变量名 5 #print()打印 6 7 # 英文名字大全 http://ename.dict.cn/list/all/M 8 9 names = ['Cahill','Teenglan','Eric','Peggie','Aalto','Baal','Sadie', 10 'Gage','Hagan','Jack','Kaley','Mabel','Lacy','Nadine','Pace','Amy'] 11 12 #通过下标访问列表中的元素,下标从0开始计数 13 print('---通过下标访问列表中的元素----') 14 15 print(names[0]) 16 print(names[1],names[3],names[4]) 17 print(names[-1]) 18 print(names[-2]) #还可以倒着取 19 print(' ') 20 21 print('---切片:取多个元素---') 22 print(names[1:4]) #取下标1至下标4之间的数字,包括1,不包括4 23 print(names[1:-1]) #取下标1至-1的值,不包括-1 24 print(' ') 25 26 print('---切片:取下标1至-1的值,不包括-1---') 27 print(names[0:3]) #取下标1至-1的值,不包括-1 28 print(names[:3]) #如果是从头开始取,0可以忽略,跟上句效果一样 29 print(' ') 30 31 print('---参数默认是0,-1就是倒数第1个----') 32 print(names[:3]) #如果想取最后一个,必须不能写-1,只能这么写 33 print(names[3:-1]) #这样-1(最后一个)就不会被包含了 34 print(' ') 35 36 print('---参数默认是0----') 37 print(names[0:5:2]) #后面的2是代表,每隔一个元素,就取一个,默认是1 38 print(names[::3]) #参数默认是0,所以可以不写 39 print(' ') 40 41 print(' ') 42 print('---追加names.append('')---每次只能追加一个') 43 names.append('我是新来的',) 44 print(names) 45 print(' ') 46 47 48 print(' ') 49 print('---插入names.insert(下标号,名字)---每次只能插入一个') 50 names.insert(3,'强行插队到下标位置3') 51 print(names) 52 print(' ') 53 54 print(' ') 55 print('---修改names[下标号]---') 56 names[5] = '修改换人了' 57 print(names) 58 print(' ') 59 60 print(' ') 61 print('---删除names.remove('')---') 62 print(names) 63 names.remove('Eric')#删除指定元素名字 64 print(names) 65 print(' ') 66 67 print('---删除names.pop(下标号)---') 68 print(names) 69 names.pop(2)#删除指定列表中下标的值,默认-1 70 print(names) 71 print(' ') 72 73 print(' ') 74 print('---拷贝names.copy()---') 75 print(names) 76 name_copy = names.copy() 77 print(name_copy) 78 print(' ') 79 80 print(' ') 81 print('---排序names.sort()和翻转names.reverse()---') 82 print('3.0里不同数据类型不能放在一起排序了') 83 print(names) 84 names.sort() 85 print(' ') 86 print(names) 87 names.reverse() 88 print(' ') 89 print(names) 90 91 print(' ') 92 print('---扩展names.extend(下标号)---') 93 print('---数字默认为字符串""可以不加,但是数据类型却是整数--') 94 print(names) 95 b = ['3',9,'Amy','Amy','b的扩展'] 96 names.extend(b) 97 print(names) 98 print(' ') 99 100 101 print(' ') 102 print('---统计names.count(' ')---') 103 print(names) 104 cut = names.count('Amy') 105 print(' ') 106 print(cut) 107 print(' ') 108 109 110 print(' ') 111 print('---获取下标names.index(' ')---') 112 print(names) 113 idx = names.index('Amy') 114 print(' ') 115 print(idx) 116 print(' ')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎 2 #元组 3 #元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表 4 #它只有2个方法,一个是count,一个是index,完毕。 5 6 #列表的写法 7 name = ['Cahill','Teenglan','Eric','Amy','Amy','Amy','5','8'] 8 9 #元组的写法 10 names = ('Cahill','Teenglan','Eric','Amy','Amy','Amy','Amy','Amy') 11 12 print(' ') 13 print('---统计names.count(' ')---') 14 print(names) 15 cut = names.count('Amy') 16 print(' ') 17 print(cut) 18 print(' ') 19 20 21 print(' ') 22 print('---获取下标names.index(' ')---') 23 print(names) 24 idx = names.index('Amy') 25 print(' ') 26 print(idx) 27 print(' ') 28 29 #元组不能追加等操作,会报错。 30 names.append('新加')
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #以下代码复制到python(3.6.2rc2)下 按F5 可以正常执行,对比学习。QQ:124111294欢迎交流py 2 3 #列表、元组操作浅copy(复制文件的快捷方式)和深copy(复制文件) 4 5 # names<变量名> print()<打印> 6 7 names = ['Cahill','Teenglan','Eric','Peggie','Aalto','Baal','Sadie', 8 'Gage','Hagan','Jack','Kaley','Mabel','Lacy','Nadine','Pace','Amy'] 9 10 print('---原来列表的内容---') 11 print(names) 12 print(' ') 13 name2 = names.copy() 14 15 print('---拷贝后列表的内容---') 16 print(name2) 17 print(' ') 18 19 print('---修改拷贝后列表里的内容---') 20 names[2] =['修改了'] 21 print(names) 22 print(' ') 23 print('---对比两个文件的内容---') 24 print(name2) 25 26 print(' ') 27 print('---列表打印-----------------------------------------------------') 28 print(' ') 29 30 print('----跳跃打印不写默认值---- ') 31 print(names[:]) 32 33 print(' ') 34 print('---跳跃打印---起始默认0:终止默认-1:跳跃默认1,默认值可以不写') 35 print(names[1:-3:2]) 36 37 print(' ') 38 print('---列表循环打印---for i in names:--- ') 39 print(' ') 40 for i in names: 41 print (i) 42 43 print(' ') 44 print(' ') 45 print('---新的实验浅pocy的用法----------------------------------------------------------------------------------------------------------------------------------------') 46 print(' ') 47 print('---重新定义列表,在列表里添加列表---') 48 name = ['Cahill','Peggie',['Ursula','Val',['Zena','Babb','Eric'],'Teenglan',],'Amy'] 49 50 print(name) 51 print(' ') 52 53 print(' ') 54 name3 = name.copy() 55 print('---拷贝后列表的内容---') 56 print(name3) 57 print(' ') 58 59 print('---修改拷贝后列表里的内容---') 60 name[1] =['改第一层'] 61 name[2][1] =['第二层'] 62 name[2][2][0] =['列表里第三层'] 63 print(name) 64 print(' ') 65 print('---对比两个文件的内容---') 66 print(name3) 67 print(' ') 68 69 print('浅pocy 只复制第一层内容,第二层开始只复制其快捷方式') 70 print(' ') 71 72 print(' ') 73 print('---深copy的使用---copy.deepcopy(namett)------完全多层复制---尽量不用------------------') 74 print(' ') 75 76 import copy 77 namett = ['Cahill','Peggie',['Ursula','Val',['Zena','Babb','Eric'],'Teenglan',],'Amy'] 78 print('---重新定义列表---') 79 print(namett) 80 nameff = copy.deepcopy(namett) 81 print('---拷贝后列表的内容---') 82 print(nameff) 83 print(' ') 84 85 print(' ') 86 print('---修改拷贝后列表里的内容---') 87 namett[1] =['改第一层'] 88 namett[2][1] =['第二层'] 89 namett[2][2][0] =['列表里第三层'] 90 print(namett) 91 print('---对比两个文件的内容---连第二第三层都没有跟着修改---') 92 print(nameff) 93 print(' ') 94 95 print(' ') 96 print('---深copy的使用---完全多层复制-------尽量不用----------------------------------') 97 print(' ') 98 99 print(' ') 100 print('---新的实验-数值的pocy------------------------------------------------------------') 101 print('数值的pocy---------------------------------------------------------') 102 a = 1 103 b = a 104 print(a) 105 print(' ') 106 print(b) 107 print(' ') 108 109 print('重新定义a后的对比') 110 a = 2 111 print(a) 112 print(' ') 113 print(b) 114 print(' ') 115 116 print(' ') 117 print(' ') 118 print('---浅copy的用法-----------------------------------------------------------') 119 print(' ') 120 #import<调用> copy<函数拷贝模块> list()<列表> print()<打印> 121 122 import copy 123 person=['name',['saving',100]] 124 125 p1=copy.copy(person) 126 p2=person[:] 127 p3=list(person) 128 129 print(p1) 130 print(' ') 131 print(p2) 132 print(' ') 133 print(p3) 134 print('-----------------------------------------------------------------------------------') 135 136 # 137 #列表、元组操作
浅copy歪解
创建一个列表 等于图一
names = [['Eric','Jack']'Alex','Cahill','Rain','Tenglan','Aalto','Toml',]
浅copy 等于图二 浅pocy 只复制第一层内容,第二层开始只复制其快捷方式
name3 = name.copy()
图一
图二