python学习笔记-(四)列表&元组
1.列表及元组操作
1.1 列表
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
定义列表:
| 1 | >>> namelist =['cc','uu','tt','yy','nn'] | 
变量namelist就是一个list。用len()函数可以获得list元素的个数:
| 1 | >>> print(len(namelist)) | 
1.1.1 list取值
用索引来访问list中每一个位置的元素,记得索引是从0开始的:
| 1 2 3 4 5 6 7 8 9 10 | print(namelist[0])cc>>> print(namelist[1])uu>>> print(namelist[2])tt>>> print(namelist[3])yy>>> print(namelist[4])nn | 
当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(namelist) - 1。
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
| 1 2 | >>> print(namelist[-1])nn | 
以此类推,可以获取倒数第二个、第三个:
| 1 2 3 4 | >>> print(namelist[-2])yy>>> print(namelist[-3])tt | 
1.1.2 新增
追加元素--append
list是一个可变的有序表,可追加元素到末尾
| 1 2 3 | >>> namelist =['cc','tt','uu','yy']>>> namelist.append('ll')>>> print(namelist)>>print('cc','tt','uu','yy','11') | 
添加到指定位置--insert
| 1 2 | >>> namelist.insert(1,'kk')>>> print(namelist) | 
1.1.3 删除
删除末尾元素--pop()
| 1 2 | >>> namelist.pop()>>> print(namelist) | 
删除指定元素--pop(i)
| 1 2 | >>> namelist.pop()>>> print(namelist) | 
删除列表
del(list)是直接删除整个列表,再次打印列表时会报:NameError: name 'namelist' is not defined
| 1 2 | >>> del(namelist)>>> print(namelist) | 
删除指定元素--del
| 1 2 | >>> del(namelist[0])>>> print(namelist)   | 
删除指定元素--remove
| 1 2 | >>> remove.namelist('cc')>>> print(namelist) | 
1.1.4 修改
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
| 1 2 | >>> namelist[1] ='rr'>>> print(namelist) | 
1.1.5 切片
取多个元素就需要用到切片;
切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。记住:数是可选的,而冒号是必须的。
切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置开始 ,刚好在结束位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。----顾头不顾尾
| 1 2 3 4 5 6 7 8 9 10 11 | >>> namelist =['cc','tt','uu','yy']>>> print(namelist[1:3])#取下标1到3之间的值,包含1,不包含3['tt', 'uu']>>> print(namelist[0:3])#取下标0到3之间的值,包含0,不包含3['cc','tt','uu']>>> print(namelist[:3])#如果是0开头,可以省略0,同上句['cc','tt','uu']>>> print(namelist[0:])#想取最后一个,只能这么写['cc','tt','uu','yy']>>> print(namelist[::2])#从头取到尾,每隔一个元素就取一个['cc', 'uu'] | 
也可以用负数做切片,负数用在从序列尾开始计算的位置。
| 1 2 | >>> print(namelist[0:-3])['cc'] | 
1.1.6 获取下标
可通过index查找元素,返回下标
| 1 2 | >>> print(namelist.index('cc'))0 | 
也可通过找到的下标获取元素值---忘记他吧!
| 1 2 | >>> print(namelist[namelist.index('cc')])cc | 
1.1.7 统计
| 1 2 3 | >>> namelist =['ty','tuu','tu','ye','tu']>>> print(namelist.count('tu'))2 | 
1.1.8 反转
| 1 2 3 4 | >>> namelist =['ty','tuu','tu','ye']>>> namelist.reverse()>>> print(namelist)['ye', 'tu', 'tuu', 'ty'] | 
1.1.9 排序
按照ascii码表排序
| 1 2 3 4 | >>> namelist =['ty','tuu','tu','ye']>>> namelist.sort()>>> print(namelist)['tu', 'tuu', 'ty', 'ye'] | 
1.1.10 扩展
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
| 1 2 3 4 5 | >>> namelist1 =['cc','tt','yy','uu']>>> namelist2 =['ww','ee','bb']>>> namelist1.extend(namelist2)>>> print(namelist1)['cc', 'tt', 'yy', 'uu', 'ww', 'ee', 'bb'] | 
2.元组
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
2.1 创建元组
| 1 2 3 | >>> names =('cc','uu','jack')>>> print(names)('cc', 'uu', 'jack') | 
创建空元组:
| 1 | >>> names1 =() | 
元组中只包含一个元素时,需要在元素后面添加逗号来消除歧义:
| 1 2 3 4 5 6 7 | >>> names2 =(50)#定义的不是元组,是50这个数!这是因为括号()既可以表示元组,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。>>> print(names2)50>>> names3 =(50,)>>> print(names3)(50,) | 
2.2 访问元组
元组也可以使用下标索引来访问元组中的值
| 1 2 3 | >>> names =('cc','nn','mack')>>> print(names[1])nn<br>>>> print(names[-1])<br>mack<br>>>> print(names[:2])<br>('cc', 'nn') | 
2.3 修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合:
| 1 2 3 4 5 | >>> name1 =('cc','nn')>>> name2 =('yy','uu')>>> name3 =name1 +name2>>> print(name3)('cc', 'nn', 'yy', 'uu')<br><br>以下操作会报错,TypeError: 'tuple'objectdoes notsupport item assignment<br>>>> name1[0] ='tt'<br>>>> print(name1) | 
2.4 删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组:
| 1 2 3 4 | >>> name =('cc')>>> delname>>> print(name)元组name已被删除,会报错,NameError: name 'name1'isnotdefined | 
2.5 “可变”的元组
| 1 2 3 4 | >>> name =('cc','nn',['tt','yy'])>>> name[2][0] ='uu'>>> name[2][1] ='ii'>>> print(name) | 
元组的每个元素,指向永远不变.指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
2.6 打印下标
| 1 2 3 4 5 | >>> name =('cc','nn')>>> print(name.index('cc'))0>>> print(name.index('nn'))1 | 
2.7 统计
| 1 2 3 | >>> name =('cc','nn','nn')>>> print(name.count('nn'))2 | 
3.练习
程序:购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
代码示例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | shopping_code =[]product_list =[    ('iphone',8000),    ('bike',800),    ('car',20000),    ('coff',30),]salary =input("请输入您的工资:")ifsalary.isdigit():    salary =int(salary)    whileTrue:        forindex,item inenumerate(product_list):            print(index,item)        user_choice =input("请输入您要购买的商品编号:")        ifuser_choice.isdigit():            user_choice =int(user_choice)            ifuser_choice < len(product_list) anduser_choice >=0:                p_item =product_list[user_choice]                ifp_item[1] < salary:                    shopping_code.append(p_item)                    salary -=p_item[1]                    print("商品%s已被添加到购物车"%p_item[0])                    print("剩余余额\033[31;1m%s\033[0m"%salary)                else:                    print("您的余额只剩\033[31;1m%s\033[0m啦!买不了啊,哥!"%salary)                    print("----购物车商品----")                    forp inshopping_code:                        print(p)                    break            else:                print("您选择的商品%s不存在!请重新输入!"%user_choice)        elifuser_choice =='q':                print("----购物车商品----")                forp inshopping_code:                    print(p)                print("您剩余余额是:%s"%salary)                break        else:            print("商品编号不正确,请重新输入!")else:    print("工资输入错误,即将退出。。。。") | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号