💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[toc] ## 列表的定义和创建 ### 定义: `[]`内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 ### 列表的创建 * 常用方法(**常用**) * 定义空列表 `L1=[]` * 定义普通列表 `L2=['张三','李四','noah']` * 定义嵌套列表 `L3=['张三',['李四','alex']]` * 其他方法 所谓其他方式,其实就是在定义列表时,使用列表函数`lsit()`来定义,一般都这样用 `list_test=list('noah')` `list_test=list(['张三',‘李四’,'noah'])` ## 列表的特点 1. 可存放多个值 2. 按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序 | list | | 张三 | 李四 | noah | | --- | --- | --- | --- | --- | | 索引 | | 0 | 1 | 2 | 3. 可修改指定索引位置对应的值,可变 ## 列表的常用操作: ### 查询取值+索引 列表`L2=['a','b',['c','d'],'a','e',1,2]` * 通过索引取值 ``` >>> L2[0] #取值顺序从左至右,从0开始 'a' >>> L2[-1] #可以指定负数,从右至左取值 2 ``` * 嵌套列表取值 ``` >>> L2[2] ['c', 'd'] >>> L2[2][0] #嵌套列表就用多个下标 'c' >>> ``` * 返回指定元素的索引值 ``` >>> L2.index('a') #多个元素相同,只会返回第一个元素的索引 0 >>> L2.index('b') 1 ``` ### 统计+包含 列表`L2=['a','b',['c','d'],'a','e',1,2]` * 统计指定元素的个数`count` ``` >>> L2.count('a') 2 ``` * 统计列表长度`len` ``` >>> len(L2) 5 ``` * 判断元素是否包含在列表中`in` or `not in` ``` >>> 'noah' in L2 False >>> 'd' in L2 True ``` ### 切片 切片顾头不顾尾,用单冒号`:`进行切片,用双冒号'::'可指定切片步长 列表`L2=['a','b','c','d','a','e',1,2]` * 单冒号切片`:` ``` >>> L2[0:3] #顾头不顾尾,返回0,1,2三个元素 ['a', 'b', 'c'] >>> L2[0:-1] #用负号从后面计算,但不包含最后一个元素 ['a', 'b', 'c', 'd', 'a', 'e', 1] >>> L2[3:] #冒号后面不写表示到最后一个元素 ['d', 'a', 'e', 1, 2] >>> L2[:] #前后都不写,表示所有元素 ['a', 'b', 'c', 'd', 'a', 'e', 1, 2] ``` * 双冒号带步长切片`::` ``` >>> L2[1:6:2] #默认步长1,这里指定步长2 ['b', 'd', 'e'] >>> L2[::2] ['a', 'c', 'a', 1] ``` ### 插入+追加+扩展 列表`L2=['A','B','C','D']` * 追加`append` append是在列表最后面追加一个元素,不能一次追加多个,但可以追加一个列表做嵌套列表 ``` >>> L2.append('noah') >>> L2 ['A','B','C','D','noah'] >>> L2.append(['aa','cc']) >>> L2 ['A', 'B', 'C', 'D', 'noah', ['aa', 'cc']] ``` * 插入`insert` insert是在指定的索引位置,插入一个元素,并将原来的元素依次往后挤 ``` >>> L2.insert(2,'D') >>> L2 [''A','B','D','C','D', 'noah', ['aa', 'cc']] ``` * 列表扩展`extend` ``` #extend方法将新列表追加到原列表后面 >>> L2=['A','B','C','D'] >>> L3=[1,'F','G',2] >>> L2.extend(L3) >>> L2 ['A', 'B', 'C', 'D', 1, 'F', 'G', 2] # 也可以不命名列表,直接写信列表值,相当于同时append追加多个元素 >>> L2=['A','B','C','D'] >>> L2.extend([1,'F','G',2]) >>> L2 ['A', 'B', 'C', 'D', 1, 'F', 'G', 2] ``` ### 修改 列表`L2=['A','B','C','D']` * 修改 ``` >>> L2[2]='BBB' >>> L2 ['A','B','BBB','C','D'] ``` ### 删除+清空 列表自带方法不能指定索引位置进行删除,python全局方法可以 列表`L2=['A','B','C','A','F','D']` * 列表自带方法 ``` >>> L2.pop() #pop方法,删除最后一个元素 'noah' >>> L2 ['A','B','C','A','F'] >>> L2.remove('A') #remove方法,删除找到的第一个元素 >>> L2 ['B','C','A','F'] ``` * python全局方法 ``` >>> del L2[-2] #删除指定位置的元素 >>> L2 ['B','C','F'] >>> del L2[0:2] #删除列表多个元素 >>> L2 ['F'] ``` * 清空列表 ``` >>> L2.clear() >>> L2 [] ``` ### 循环+枚举 使用for循环即可将列表中的每个元素循环打印出来,如果要同时打印元素及其索引,可以使用`enumerate`函数进行枚举后打印 列表`L2=['A','B','C','A','F','D']` * 循环打印每个元素 ``` >>> for i in L2: ... print(i) ... A B C A F D ``` * 循环打印元素及其索引`enumerate`1 枚举函数可以将元素及其索引作为一个小列表打印出来 ``` >>> for i in enumerate(L2): ... print(i) ... (0, 'A') (1, 'B') (2, 'C') (3, 'D') ``` * 循环打印元素及其索引`enumerate`1 如果想让元素和索引分开打印,可以用两个变量来循环 ``` for i,n in enumerate(L2): ... print(i,n) 0 A 1 B 2 C 3 A 4 F 5 D ``` ### 排序+反转 列表排序使用sort方法,但被排序的列表中不能同时有数字和字符串,否则会报错,排序顺序是按ASCII码进行的. 列表`L2=['a','A','@','!','B','b']` * 排列 ``` >>> L2.sort() >>> L2 ['!', '@', 'A', 'B', 'a', 'b'] ``` * 反转 对列表当前顺序进行反转,可配置排序做逆序排序 ``` >>> L2.reverse() >>> L2 ['b', 'a', 'B', 'A', '@', '!'] ``` ### 等于+拷贝 列表`L2=['A','B','C','D']` * 等于`=` 两个列表相等和两个字符串相等不一样,源列表的内容改变会影响新列表,这是因为列表有一个内存地址,列表中的每个元素也有一个内存地址,列表指向了这每一个元素的地址,所以改变源列表的值时,该列表对于的内存地址实际未变化,变化的是该元素再指向的内存地址 ``` >>> L3=L2 >>> L2[0]='X' >>> L2 ['X', 'B', 'C', 'D'] >>> L3 ['X', 'B', 'C', 'D'] ``` * 拷贝`copy` 为了让两个列表不互相影响,就需要用到`copy`方法,可以让新列表使用新内存地址 ``` >>> L2=['A','B','C','D'] >>> L3=L2.copy() >>> L2[0]='X' >>> L2 ['X', 'B', 'C', 'D'] >>> L3 ['A', 'B', 'C', 'D'] ``` * 深度`copy` 其实这种copy也只是浅copy,如果列表中有子列表的话,仍然是同一个内存地址 如果要用完全复制,就要导入`copy`工具箱,然后使用里面的`deepcopy`方法