1.列表
Python内置的一种有序、可变的序列数据类型;
列表的定义:
\]括起来的逗号分隔的多个元素组成的序列 ### 列表对象的创建: (1)直接赋值= ```python >>> list1 = []#创建一个空列表赋值给list1 >>> list2 = [1,2,3,4,5]#创建一个元素为整数的列表对象list2 >>> list3 = ['Python',[6,6,6],5.13]#创建元素为字符串、列表的对象list3; >>> list4 = [['乔峰','M',35],['东方不败','F',36]] #元素的数据类型可以各不相同 ``` (2)list()函数 ```python list()函数可将可迭代对象的数据转换为列表,如字符串、元组、range对象等 >>> x = list() # 创建一个空列表[ ] >>> y = list((1,2,3,4,5)) # y的值为 [1, 2, 3, 4, 5] >>> z = list(range(5)) # z的值为 [0, 1, 2, 3, 4] >>> s = list('Python') # s的结果为['P', 'y', 't', 'h', 'o', 'n'] ``` Tips:append()和extend()方法属原地操作,不改变列表在内存的起始地址 ### 列表的主要操作: 元素的**增**、删、改、查 增加列表元素:列表元素增加或删除时,列表对象自动进行扩展或收缩内存。 运算符"+" ,不建议! ```python >>> l1 = [1,2,3] >>> l1 = l1+[10] #创建新列表,非在l1后增加元素 >>> l1 #还记得基于值的内存管理方式吗? [1, 2, 3, 10] ``` 列表对象的append()方法 ```python append()方法在列表尾部增加元素,类型任意 >>> x = [ ] #append()方法只能有一个参数 >>> x.append('乔峰') # 增加字符串元素 >>> x.append([1999,7,7]) # ['乔峰', [1999, 7, 7]] ``` 列表对象的extend()方法 ```python extend()方法将另一个迭代对象的所有元 素添加至该列表对象尾部 >>> x.extend(['M',35]) >>> x ['乔峰', [1999, 7, 7], 'M', 35] ``` 增加列表元素:列表元素增加或删除时,列表对象自动进行扩展或收缩内存。 列表对象的insert()方法:涉及插入位置之后所有元素的移动,影响速度; ```python insert()方法将元素添加至列表的指定位置 >>> l1 = [1,2,4,5] >>> l1.insert(2,3)# 在下标为2的位置插入元素3 >>> x [1,2,3,4,5] >>> x.insert(2,[2.5,2.6]) >>> x [1, 2, [2.5,2.6], 3, 4, 5] ``` 乘法\*扩展列表对象。 ```python *复制列表元素,生成一个新列表 >>> x = [1,2,3]*3 >>> x [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> y = [1,[2,3]]*2 >>> y [1, [2, 3], 1, [2, 3]] ``` 列表的主要操作:元素的增、**删**、改、查 删除列表元素: del命令 ```python del命令可以删除列表元素,也可删除整个列表对象 >>> x = ['乔峰', [1999, 7, 7], 'M', 35] >>> del x[1] #删除下标索引为1的元素:[1999, 7, 7] >>> del x #删除整个列表 ``` 列表对象的pop()方法 ```python pop()方法删除并返回指定(默认为最后一个)位置 上的元素,若位置索引超出范围则抛出异常。 >>> x = ['乔峰', [1999, 7, 7], 'M', 35] >>> age = x.pop() # ['乔峰', [1999, 7, 7], 'M'] >>> birth = x.pop(1) # ['乔峰', 'M'] ``` 列表对象的remove()方法 ```python remove()方法删除首次出现的指定元素,若 列表中不存在指定元素,则抛出异常。 >>> birth.remove(7) >>> birth [1999, 7] ``` 列表的主要操作:元素的增、删、改、**查** 获取列表元素: 下标索引的方式访问单个元素; 切片方式: Object \[ start : end : step \] IndexError: list index out of range ```python >>> x = ['乔峰', [1999, 7, 7], 'M', 35] >>> name = x[0] # name值为:'乔峰' >>>> x[-1] = 40 >>> x ['乔峰', [1999, 7, 7], 'M', 40] ``` 列表、元组和字符串均支持双向索引  ### **切片详解** 适用于可用于列表、元组、字符串、range对象等 Object \[ start : end : step \],切片操作不会因为下标越界而抛出异常,代码更健壮 ```python >>> aList = [1, 2 3, 4, 5, 6, 7, 8, 9, 10] >>> aList[ : : ] #返回包含所有元素的新列表 >>> aList[::-1] #逆序的所有元素 >>> aList[::2] #偶数位置,隔一个取一个 >>> aList[1::2] #奇数位置,隔一个取一个 >>> aList[3::] #从下标3开始的所有元素 >>> aList[3:6] #下标在[3, 6)之间的所有元素 >>> aList[0:100] #前100个元素,下标越界,自动截断 >>> aList[100:] #下标100之后的所有元素,越界,自动截断,返回空列表[ ] ``` 列表的主要操作:元素的增、删、改、**查** 列表相关查询: (1)index()方法获取指定元素首次出现的下标 (2)count()方法统计指定元素在列表对象中出现的次数 (3)"in"关键字来判断一个值是否存在于列表中,返回结果为"True"或"False" ```python >>> x= ['zhang','xu','乔峰'] >>> x.index('乔峰') 2 ``` 列表的主要操作:元素的增、删、**改**、查 基于下标索引和切片,可直接使用赋值语句修改列表元素值 ```python >>> x = ['乔峰', [1999, 7, 7], 'M', 35, 1.83] >>> x[-2] = 40 #修改年龄为40,结果为['乔峰', [1999, 7, 7], 'M', 40, 1.83] >>> x[:2] = ['东方',[1966,6,6]] #替换前两个元素,结果为['东方', [1980, 6, 6], 'M', 40, 1.83] >>> x[:2:-1] = [1.75,54] #逆序替换后两个元素!结果为['东方', [1980, 6, 6], 'M', 54, 1.75] >>> x[1:3] = [ ] #删除下标1到3的3个元素,结果为['东方', 54,1.75] >>> del x[::2] #删除下标位置为偶数的元素,结果为[54] ``` 与列表统计或操作相关的其他内置函数和列表方法  ### 编写.py代码,实现以下功能: 1.石头、剪刀、布人机大战游戏 人类通过输入1,2,3分别代表出石头、剪刀和布; 计算机随机出石头、剪刀和布手势; 判断谁赢了并给出结果。 Tips: 可将石头、剪刀、布放在一个列表中; 可将所有人胜的情况列举出并放在一个列表中,即当人出石头、剪刀、布而计算机出剪刀、 布和石头时,人赢;不在上述三种情况的,机器赢。 使用random库进行随机操作。 ### 编写.py代码,实现以下功能: 模拟用户登录系统和相关操作: 1. 建立用户名列表user,用户包括:admin, root, guest 2. 建立用户的密码列表pwd,对应密码为:admin, 123, 456 3. 输入一个用户名,如果存在该用户,则继续输入密码;如果不存在该用 户,则显示:该用户不存在。密码正确,显示'登录成功';密码不正确,提 示密码错误;\[登录成功后,可修改密码\]。 4. root用户登录成功后,可以对用户增、删。 ### 列表推导式(解析式) list comprehension 优雅神奇的列表生成方式,适用于字典、集合等可迭代结构 将for循环压缩成一行代码,生成列表、字典或集合等可迭代数据结构(iterables) 