05-4 数据类型—list
list
list列表是Python内置的一种数据类型,是一种有序的集合。
一、创建list
names = ['jack', 'alex', 'james', 'rick', 'maggie'] names2 = list([1, 3, 5, 7]) # 实例化对象。自动执行list类中的__init__方法 内部执行for循环(1, 3, 5, 7)
二、操作
1、查
(1)关于索引
按索引从list中定位值,有正向和负向两套索引:
['jack', 'alex', 'james', 'rick', 'maggie']
索引1: 0 1 2 3 4
索引2: -5 -4 -3 -2 -1
names[3] #取列表中第4个值。内部实际上是去执行list对象的__getitem__方法。
names[-1] #取列表中的最后一个值
names.index('james') #查找列表中第一个james这个元素的索引值
(2)切片操作
names[ 开始位置 : 结束位置 :步长 ]
可切出一个新的列表(哪怕只是一个值,其类型也是列表)。遵循“顾头不顾尾”原则
names[:] #取列表的所有内容,也可进一步简写为names names[1:3] #取列表中第2位——第4位的值,不包含第4位。 names[:-2] #取列表中首位——倒数第2位的值,不包括倒数第2位 names[-3:] #取列表中倒数第3位——最后一位的值,且包括最后一位 names[1:100] #给的下标超值过实际列表最后一位下标的值时,取第2位——最后一位,包含最后一位 names[1:100:2] #从第2位起,以2为步长取列表中的值,就是跳着切。没写加步长时,默认步长值为1 names[3:0:-1] #步长为负号时,倒着走。同样遵循“顾头不顾尾”原则,只是这时头在右边,尾在左边
2、增
names.append('mike') #在列表尾部追加新的对象
names.insert(1, 'bob') #把bob插入到第2个位置,原有的第2位及之后的内容顺次后移
names.extend(names2) #在列表names的尾部一次性追加names2的多个值,names成为新列表,而names2不变
3、改
names[2] = 'judice' #把第3个位置的元素改成judice。内部实际上是去执行list对象的__setitem__方法。 names[1:3] = ['a', 'b'] #将第2位、第3位(不含第4位)的值分别改为'a'、'b'
4、删
names.remove('mike') #通过值,把'mike'从列表中删除
names.pop(2) #通过索引,删除列表中的第3位的值,且返回该删除值(可赋值给变量)。pop()默认最后一个位
names.clear() #清空列表,危险操作,请慎用
del names[2:5] #把第3、4、5位的值删除。内部实际上去执行list对象的__delitem__方法
del names #直接删除names这个对象
5、其他
names.count(9) #查询names中有几个9 names3 = names + names2 #names和names2的值合并成新列表,并赋值给新列表names3。names、names2不变 names.reverse() #把列表反转,就是把原有顺序完全反过来了。通过内置函数reversed(names)能返回顺序翻转后的列表。 names.sort() #把列表永久性的排序。sort(reverse = True)为从大到小排序,reverse参数默认值为False sorted(names) #对列表进行临时性的排序,用于将结果传给变量 len(names) #确定列表的元素个数 'Jack' in names #判断names中是否存在元素9,若存在返回True,反之False
names2 = names.copy() #浅拷贝:复制列表names。只copy第一层。(列表中的列表属于第二层....) import copy names2 = copy.deepcopy(names) #深拷贝:完全copy,包括里面所有的层。
6. 补充
列表生成式:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
L = []
for i in range(1, 10):
L.append(i)
print(L) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
l = [x*x for x in range(8)] # 把要生成的元素 x*x 放到前面,后面跟for循环
print(l,type(l)) # 屏幕输出:[0, 1, 4, 9, 16, 25, 36, 49] <class 'list'>
L = ['Hello', 'World', 'IBM', 'Apple']
l5 = [s.lower() for s in L] # 要生成的元素处使用函数
print(l5) # 屏幕输出:['hello', 'world', 'ibm', 'apple']
#还可以加if
l2 = [x*x for x in range(8) if x%2 == 0]
print(l2) # 屏幕输出:[0, 4, 16, 36]
#还可以使用两层循环
l3 = [m+n for m in 'ABC' for n in 'XYZ']
print(l3) # 屏幕输出:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#还可以使用两个变量
d = {'x': 'A', 'y': 'B', 'z': 'C' }
l4 = [k + '=' + v for k, v in d.items()]
print(l4) # 屏幕输出:['x=A', 'y=B', 'z=C']
tuple
一、创建元组
1、什么是元组
元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组。元组写在小括号 ( ) 里,元素之间用逗号隔开。
2、作用
- 对于一些数据我们不想被修改,可以使用元组;
- 另外,元组的意义还在于,元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。
3、其他点
- 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组 tup2 = (20,) # 一个元素,需要在元素后添加逗号
- 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表
t = (11, 22, ["alex", "john", "jack"]) t[2][1] = "rick" print(t)
--------------打印结果----------------
(11, 22, ['alex', 'rick', 'jack']
- 使用的是逗号来生成一个元组:
a = 1, 2, 3 print(a) # (1, 2, 3)
product_list = [('iphone', 5800), #使用嵌套 ('macbook', 9000), ('coffee', 30), ('pythonbook', 80), ('bicycle', 1500)] saving = input('请充值:') choice_list = [] if saving.isdigit(): #判断输入是否合法 saving = int(saving) while True: for i, v in enumerate(product_list, 1): #enumerate()给对象编号。第二参数可设置起始数字,默认为0 print(i, v) choice = input('请输入选择的产品编号[按q退出]:') if choice.isdigit(): choice = int(choice) if choice > 0 and choice <= len(product_list): #len(product_list)保证能随product_list的增删动态变化 item = product_list[choice-1] if item[1] <= saving: saving = saving - item[1] choice_list.append(item) print("已将%s加入购物车,您的余额为%d元"%(item[0], saving)) else: print('余额不足!') else: print('编号错误!') elif choice == 'q': print('您已经选择如下产品:') for i, v in enumerate(choice_list): print(i, v) print('您的余额为:', saving) break else: print('输入错误,请您输入产品编号 ') else: print('Invalid input !')
def show_shopping_car(choice_list, saving): print('您已经购买的商品如下'.center(50, '*')) for i, v in enumerate(choice_list, 1): print('\033[35;1m %s: %s \033[0m' % (i, v)) expense = 0 for i in choice_list: expense += i[1] print('\n\033[32;1m您的余额为 %s \033[0m' % (saving - expense)) return (saving - expense) product_list = [('iphone', 5800), ('macbook', 9000), ('coffee', 30), ('pythonbook', 80), ('bicycle', 1500)] saving = input('请充值:') choice_list = [] if saving.isdigit(): #判断输入是否合法 saving = int(saving) while True: for i, v in enumerate(product_list, 1): #enumerate()给对象编号。第二参数可设置起始数字,默认为0 print(i, v) choice = input('请输入选择的产品编号[按q退出]:') if choice.isdigit(): choice = int(choice) if choice > 0 and choice <= len(product_list): #len(product_list)保证能随product_list的增删动态变化 item = product_list[choice-1] if item[1] <= saving: choice_list.append(item) show_shopping_car(choice_list, saving) else: print('余额不足!') else: print('编号错误!') elif choice == 'q': show_shopping_car(choice_list, saving) break else: print('输入错误,请您输入产品编号 ') else: print('Invalid input !')
浙公网安备 33010602011771号