文章目录
一、Python中的索引
序列
- 序列是一个用于存储多个值的连续空间,每个值对应一个整数的编号,称为索引
- 序列结构主要有列表、元组、集合、字典和字符串
索引
- 正向递增索引,取值范围[0,N-1]
- 反向递减索引,取值范围[-1,-N]
二、序列的相关操作
1.切片操作
语法结构:序列[start: end: step]
start:表示切片开始位置(包括开始位置),若不指定,默认0(冒号不可省略)。
end:表示切片结束位置(不包括结束位置),若不指定,默认为序列长度。
step:表示步长,如果省略,默认1,当省略步长时,最后一个冒号可以省略。步长可以为负数,实现逆向拷贝。
2.序列的相加和相乘
- 相加
使用“+”实现两个同类型序列的相加操作,不会去除重复元素
- 序列的类型要求是相同的,但是序列中元素的类型可以是不同的
- 相乘
使用一个数字n乘以一个序列,将生成一个新的序列,新序列中的内容会被重复n次
3.序列的相关操作符与函数
三、列表
列表:
·一系列的按照特定顺序排列的元素组成
·Python中内置的可变序列
·使用[]定义列表,元素之间使用逗号分隔
·元素可以是任意的数据类型
列表的创建:
- 列表名=[e1,e2,…eN]
- 列表名=list(序列)
列表的删除:del 列表名
若列表中只有一个元素,逗号可以省略
列表元素的遍历
1.使用for
2.使用for与range()函数和len()函数组合遍历
3.使用for与enumerate()函数组合遍历元素和索引
for index,item in enumerate(lst):
输出index和item
#index:用于保存元素的索引
#item:用于保存获取到的元素值
for i in range(len(lst)):
print(i, '-->', lst[i])
for index,item in enumerate(lst):#默认序号从0开始
print(index, item)
for index,item in enumerate(lst, 1):#序号从1开始
print(index, item)
3.1列表的相关操作方法
和列表和字符串的区别:字符串没有增、删、改的方法
- id()函数:返回对象的内存地址
- sort()函数:对原列表中的元素进行排序,排序之后原列表中元素的顺序将发生改变
lst.sort(key=None, reverse=Flase)#False升序,True降序
- 内置的sorted()函数:原列表元素顺序不变,排序后产生一个新的列表对象
sorted(iterable,key=None,reverse=False)
#忽略大小写排序,不然先排大写,再排小写
lst.sort(key=str.lower)
new_lst2 = sorted(lst2,key=str.lower)
lst = [1,3,5,7,9]
print(lst.reverse())#输出None,因为reverse()不会生成新的列表
3.2列表生成式
#生成指定范围的数值列表
lst = [item for item in range(1,11)]
lst = [item*item for item in range(1,11)]#输出1,4,9...
lst = [random.randint(1,100) for _ in range(10)]#可以不要随机变量,用_代替
#从列表中选择符合条件的元素组成新的列表
lst = [i for i in range(10) if i%2==0]
3.3二维列表
#列表生成式生成一个四行五列
lst = [[j for j in range(5)] for i in range(4)]
四、元组
列表:
·一系列的按照特定顺序排列的元素组成
·Python中的不可变序列
·使用()定义,元素之间使用逗号分隔
·元素可以是任意的数据类型
元组的创建:
- 元组名=[e1,e2,…eN]
- 元组名=tuple(序列)
元组的删除:del 元组
- 若元组中只有一个元素,逗号不能省略(t=(10),t的数据类型为int)
元组元素的遍历(与列表的遍历方式相同)
1.使用for
2.使用for与range()函数和len()函数组合遍历
3.使用for与enumerate()函数组合遍历元素和索引
for item in t:
print(item)
for i in range(len(t)):
print(i, t[i])
for index,item in enumerate(t):#默认序号从0开始
print(index, item)
for index,item in enumerate(t, 1):#序号从1开始
print(index, item)
4.1元组生成式
- 与列表生成式的语法相同
- 元组生成式的结果是一个生成器对象,需要转换成元组或列表才能查看到元素内容(与列表生成式不同)
- 生成器遍历之后,再想重新遍历必须重新创建一个生成器对象,因为遍历之后原生成器对象已经不存在了(与列表生成式不同)
t = (i for i in range(1,4))#t=(1,2,3)
print(t)#输出的不是元组,是生成器对象
t=tuple(t)
print(t)#输出元组
#遍历元组生成式
#1.for循环遍历
for item in t:
print(item)
#2.__next__()方法
print(t.__next__())#取出1
print(t.__next__())#取出2
print(t.__next__())#取出3
t = tuple(t)
print(t)#输出()
4.2元组与列表的区别
五、字典
键值对:根据一个信息查找另一个信息的方式构成了“键值对”,它表示索引用的键和对应的值构成的成对的关系
字典的特征:
- 通过键从字典中获取指定的项,但不能通过索引来获取
- 字典是无序的,也被称为hash表(散列表)
- 是Python中的可变序列
- 字典中的键必须唯一,如果出现两次,后出现的将覆盖先出现的
- 字典中的键要求是不可变序列
字典的创建:
- d={key1:value1,key2:value2…}
- 通过映射函数创建字典:zip(lst1,lst2)
- 通过给定关键字创建字典:dict(key1=value1,key2=value2…)
#1.直接使用{}
d = {10:'cat',20:'dog',30:'pet',20:'zoo'}
print(d)#输出{10:'cat',20:'zoo',30:'pet'}
#2.zip函数的使用
lst1 = [10,20,30,40]
lst2 = ['cat','dog','car','zoo']
zipobj = zip(lst1,lst2)#映射函数的结果是一个zip对象
print(zipobj)
print(list(zipobj))#输出列表
d = dict(zipobj)
print(d)#输出字典
#3.使用参数创建字典
d = dict(cat=10,dog=20)#PS:参数相当于变量,变量的名字不加引号
print(d)#输出{'cat':10,'dog':20}
t = (10,20,30)
print({t:10})#输出{(10,20,30):10}
字典的删除:del 字典名
5.1字典元素的访问和遍历
-
字典元素的访问
d[key] 或者 d.get(key) -
字典元素的遍历
for element in d.items():
pass
for key,value in d.items():
pass
d = {'hello':10,'world':20,'python':30}
#访问字典中的元素
#1.使用[key]
print(d['hello'])
#2.使用d.get(key)
print(d.get('hello'))
#二者有区别,如果键不存在时,d[key]报错,d.get(key)可以指定默认值
print(d['java'])#KeyError:'java'
print(d.get('java'))#输出 None
print(d.get('java','不存在'))#输出 不存在
#字典的遍历
for item in d.items():
print(item)#key-value组成的一个元组
#在使用for时,分别获取key和value
for key,value in d.items():
print(key,value)
5.2字典的相关操作
d = {1001:'李梅',1002:'王华',1003:'张锋'}
#向字典中添加数据
d[1004] = '张丽丽'#直接运用赋值运算符=向字典中添加元素
#获取字典中所有的key
keys = d.key()#结果是dict_keys,Python中的一种内部的数据结构,专用于表示字典的key
#如果希望更好的显示数据,可以使用list或者tuple转成相应的数据类型
#获取字典中所有的value
values = d.value()
print(values)#dict_values
print(list(values))
print(tuple(values))
#字典遍历时用到的一个方法items
items = d.items()#dict_items
print(items)
print(list(items))
print(tuple(items))
lst = list(items)#将字典中的数据转成键-值对的形式,以元组的方式进行展示
#可以直接使用dict函数将lst转成字典
d = dict(lst)
#pop函数
print(d.pop(1008,'不存在'))#如果key不存在,结果输出默认值“不存在”,不会报错
#popitem函数
print(d.popitem())#先获取键值对,再删除,输出{1004:'张丽丽'}
print(d)#输出{1001:'李梅',1002:'王华',1003:'张锋'}
5.3字典生成式
#使用指定范围的数作key
d = {key:value for item in range}
#使用映射函数生成字典
d = {key:value for key,value in zip(lst1,lst2)}
import random
#1.
d= {item:random.randint(1,100) for item in range(4)}
#2.
lst = [1001,1002,1003]
lst2 = ['陈','王','李']
d = {key:value for key,value in zip(lst,lst2)}
六、集合
集合:
·Python中的集合与数学中的集合概念一致
·集合可分为可变集合set与不可变集合frozenset
·集合与字典中Key一致都是无序的
·集合中的元素要求唯一
·集合中只能存储不可变数据类型(字符串、整数、浮点数、元组)
·集合使用{}定义,元素之间使用逗号分隔
集合的创建:
- s={}(直接用{}创建,如果为空,为字典类型)
- s=set()(可以创建空集合)
s = set('hello')#输出{'h','o','e','l'}
集合的删除:del 元组
6.1集合的操作符
A = {10,20,30,40,50}
B = {30,50,88,76,20}
#交集
print(A&B)
#并集
print(A|B)
#差集
print(A-B)
#补集
print(A^B)
6.2集合的相关操作方法
6.3集合的遍历
for item in s:
print(item)
for index,item in enumerate(s,10):#10表示的是序号,不是索引,从几开始可以自定义
print(index,item)#index不是索引,表示序号
6.4集合生成式
s = {i for i in range(10)}
s = {i for i in range(10) if i%2}#输出奇数
七、组合数据类型总结
八、实战——千年虫
lst = [88, 89, 90, 98, 00, 99]#员工的两位整数出生年份
print('原列表:', lst)
#遍历列表
# for index in range(len(lst)):
# if str(lst[index])!='0':
# lst[index] = '19' + str(lst[index])#拼接之后,再赋值
# else:
# lst[index] = '200' + str(lst[index])
# print(lst)
#使用enumerate
for index,value in enumerate(lst):
if str(value)!='0':
lst[index] = '19' + str(value)
else:
lst[index] = '200' + str(value)
print(lst)
九、实战——京东购物模拟
#创建一个列表,用于存储入库的商品信息
lst = []
for i in range(5):
goods = input('请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品:')
lst.append(goods)
#输出所有的商品信息
for item in lst:
print(item)
#创建一个空列表,用于存储购物车中的商品
cart = []
while True:
flag = False#代表没有商品的情况
num = input('请输入要购买的商品编号:')
#遍历商品列表,查询要购买的商品是否存在
for item in lst:
if num==item[0:4]:#item[0:4]切片得到编号
flag = True # 代表找到商品的情况
cart.append(item)#添加到购物车列表
print('商品已成功添加到购物车')
break#退出for循环
if not flag and num!='q':
print('该商品不存在')
if num=='q':
break#退出while循环
print('您购物车里已选择的商品为:')
#反向
cart.reverse()
for item in cart:
print(item)