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' object does not support item assignment<br>>>> name1[ 0 ] = 'tt' <br>>>> print (name1) |
2.4 删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组:
1
2
3
4
|
>>> name = ( 'cc' ) >>> del name >>> print (name) 元组name已被删除,会报错,NameError: name 'name1' is not defined |
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 ( "请输入您的工资:" ) if salary.isdigit(): salary = int (salary) while True : for index,item in enumerate (product_list): print (index,item) user_choice = input ( "请输入您要购买的商品编号:" ) if user_choice.isdigit(): user_choice = int (user_choice) if user_choice < len (product_list) and user_choice > = 0 : p_item = product_list[user_choice] if p_item[ 1 ] < salary: shopping_code.append(p_item) salary - = p_item[ 1 ] print ( "商品%s已被添加到购物车" % p_item[ 0 ]) print ( "剩余余额 33[31;1m%s 33[0m" % salary) else : print ( "您的余额只剩 33[31;1m%s 33[0m啦!买不了啊,哥!" % salary) print ( "----购物车商品----" ) for p in shopping_code: print (p) break else : print ( "您选择的商品%s不存在!请重新输入!" % user_choice) elif user_choice = = 'q' : print ( "----购物车商品----" ) for p in shopping_code: print (p) print ( "您剩余余额是:%s" % salary) break else : print ( "商品编号不正确,请重新输入!" ) else : print ( "工资输入错误,即将退出。。。。" ) |