5.7.1 创建列表通过使用中括号将元素包裹且元素之间使用逗号分隔即可完成列表的创建。示例代码如下# 资源包\Code\chapter5\5.7\0524.py lt [1, 6.66, name, None] print(lt) # type()函数用于返回数据类型列表的输出结果为class list print(type(lt))5.7.2 访问列表中的元素1.索引访问与字符串的索引一样列表的索引也是从0开始第1个元素的索引为0第2个元素的索引为1同样也可以取负值表示从末尾提取最后1个元素的索引为-1倒数第2元素的索引为-2。索引访问分为指定索引访问和切片索引访问。其中切片索引获取的列表包括开始索引的元素但不包括结束索引的元素。示例代码如下# 资源包\Code\chapter5\5.7\0525.py lt [1, 2, 3, 4, 5, 6, 7, 8, 9] # 通过指定索引访问获取列表中的第4个元素即4 print(lt[3]) # 通过指定索引访问获取列表中的倒数第2个元素即8 print(lt[-2]) # 通过切片索引访问获取从索引1开始到索引4的元素即[2, 3, 4, 5] print(lt[1:5]) # 通过切片索引访问获取从索引3开始一直到最后的元素即[4, 5, 6, 7, 8, 9] print(lt[3:]) # 通过切片索引访问获取从索引0开始到索引5的元素即[1, 2, 3, 4, 5, 6] print(lt[:6]) # 通过切片索引访问获取列表中的全部元素即[1, 2, 3, 4, 5, 6, 7, 8, 9] print(lt[:])2.循环遍历可以通过使用for循环获取列表中的每一个元素。示例代码如下# 资源包\Code\chapter5\5.7\0526.py lt [1, 2, 3, 4, 5, 6, 7, 8, 9] for val in lt: print(val)3.拆包访问在Python中列表同样支持拆包访问。示例代码如下# 资源包\Code\chapter5\5.7\0527.py lt [1, 2, 3, 4, 5, 6, 7] n1, n2, n3, *n lt # 输出的结果为1 2 3 [4, 5, 6, 7] print(n1, n2, n3, n)5.7.3 列表的特性列表中可以存储任意数据类型的元素并且可以对列表中的元素进行修改。示例代码如下# 资源包\Code\chapter5\5.7\0528.py lt [1, 2, 3, 4, 5, 6, 7, 8, 9] lt[0] 100 # 输出结果为[100, 2, 3, 4, 5, 6, 7, 8, 9] print(lt)5.7.4 列表的相关操作1.插入通过使用insert()方法可以将指定的元素插入到列表中的指定位置。注意该方法无返回值但会修改原列表。其语法格式如下insert(index, obj)其中参数index表示索引参数obj表示元素。示例代码如下# 资源包\Code\chapter5\5.7\0529.py lt [PHP, Python, Java] # 在索引1的位置插入元素 lt.insert(1, C) # 修改原列表 print(lt)2.追加通过使用append()方法可以在列表的末尾添加新的元素。注意该方法无返回值但会修改原列表。其语法格式如下append(obj)其中参数obj表示元素。示例代码如下# 资源包\Code\chapter5\5.7\0530.py lt [PHP, Python, Java] lt.append(C) # 修改原列表 print(lt)3.删除删除列表中的元素有2种方式1remove()方法。该方法用于删除列表中第一次出现的指定元素。注意该方法无返回值但会修改原列表。其语法格式如下remove(obj)其中参数obj表示元素。示例代码如下# 资源包\Code\chapter5\5.7\0531.py lt [PHP, Python, PHP, Java] lt.remove(PHP) # 删除第一个PHP输出结果为[Python, PHP, Java]修改原列表 print(lt)2pop()方法。该方法用于删除列表中的指定元素。注意该方法的返回值为被删除的元素并会修改原列表。其语法格式如下pop([index])其中参数index为可选参数表示索引如果省略该参数则默认删除最后一个元素。示例代码如下# 资源包\Code\chapter5\5.7\0532.py lt1 [PHP, Python, Java] # 删除索引为0的元素 val1 lt1.pop(0) # 返回被删除元素的值 print(val1) # 修改原列表 print(lt1) lt2 [PHP, Python, Java] # 删除最后一位元素 val2 lt2.pop() print(val2) # 输出结果为[PHP, Python] print(lt2)4.倒置通过使用reverse()方法可以倒置列表中的元素。注意该方法无返回值但会修改原列表。其语法格式如下reverse()示例代码如下# 资源包\Code\chapter5\5.7\0533.py lt [PHP, Python, Java] lt.reverse() # 修改原列表 print(lt)5.复制通过使用copy()方法可以返回一个列表的浅复制。注意该方法返回复制之后的新列表不会修改原列表。其语法格式如下copy()示例代码如下# 资源包\Code\chapter5\5.7\0534.py lt [PHP, Python, Java] new_lt lt.copy() print(new_lt)下面再深入学习一下直接赋值、浅复制和深复制之间的区别。首先来看一段程序。示例代码如下# 资源包\Code\chapter5\5.7\0535.py a [1, 2, 3, 4, [1, 2, 3]] b a print(a的内存地址{0}.format(id(a))) print(b的内存地址{0}.format(id(b))) a.append(100) a[4].append(100) # 输出结果为[1, 2, 3, 4, [1, 2, 3, 100], 100] print(列表a{0}.format(a)) # 输出结果为[1, 2, 3, 4, [1, 2, 3, 100], 100] print(列表b{0}.format(b))上面的代码使用的是直接赋值。由于列表本身就是一个对象所以直接赋值其本质就是对象的引用即起别名所以列表a和列表b的内存地址是一致的并且由于列表a和列表b都指向同一个引用所以列表a和列表b中的元素包括子对象[1,2,3]也会被同时修改。图5-1 直接赋值然后再来看一段程序。示例代码如下# 资源包\Code\chapter5\5.7\0536.py a [1, 2, 3, 4, [1, 2, 3]] b a.copy() print(a的内存地址{0}.format(id(a))) print(b的内存地址{0}.format(id(b))) a.append(100) a[4].append(100) # 输出结果为[1, 2, 3, 4, [1, 2, 3, 100], 100] print(列表a{0}.format(a)) # 输出结果为列表b[1, 2, 3, 4, [1, 2, 3, 100]] print(列表b{0}.format(b))上面的代码使用的是浅复制。由于列表本身就是一个对象经过浅复制之后列表a和列表b都是占有内存空间的独立对象所以列表a和列表b的内存地址是不一致的进而导致修改列表a内的元素无法影响列表b。但是它们内部元素中的子对象[1,2,3]还是指向统一的引用不会因为浅复制而改变所以列表a和列表b内部元素中的子对象[1,2,3]会被同时修改。图5-2 浅复制最后再来看一段程序。示例代码如下# 资源包\Code\chapter5\5.7\0537.py import copy a [1, 2, 3, 4, [1, 2, 3]] b copy.deepcopy(a) print(a的内存地址{0}.format(id(a))) print(b的内存地址{0}.format(id(b))) a.append(100) a[4].append(100) # 输出结果为[1, 2, 3, 4, [1, 2, 3, 100], 100] print(列表a{0}.format(a)) # 输出结果为列表b[1, 2, 3, 4, [1, 2, 3]] print(列表b{0}.format(b))上面的代码使用的是深复制需要使用copy模块。由于列表本身就是一个对象经过深复制之后列表a和列表b以及其内部元素包括子对象[1,2,3]都是占有内存空间的独立对象两个列表属于完全独立的两个对象所以列表a和列表b的内存地址是不一致的并且其内部元素包括子对象[1,2,3]也不会被同时修改即列表a和列表b完全独立。图5-3 深复制6.清空通过使用clear()方法可以将列表中的元素清空。注意该方法无返回值但会修改原列表。其语法格式如下clear()示例代码如下# 资源包\Code\chapter5\5.7\0538.py lt [PHP, Python, Java] lt.clear() # 修改原列表 print(lt)7.计数通过使用count()方法可以对列表中指定元素出现的次数进行计数并返回。其语法格式如下count(obj)其中参数obj表示元素。示例代码如下# 资源包\Code\chapter5\5.7\0539.py lt [PHP, Python, Java,python,Python] # 区分大小写 numlt.count(Python) # 输出结果为2 print(num)8.查找索引通过使用index()方法可以查找指定元素第一次出现的索引并返回。其语法格式如下index(x[, start, end])其中参数x表示元素参数start为可选参数表示开始索引如果省略该参数则默认值为0参数end为可选参数表示结束索引如果省略该参数则默认值为需要查找的字符或字符串的长度注意查找范围不包括结束索引对应的值。示例代码如下# 资源包\Code\chapter5\5.7\0540.py lt1 [PHP, python, Java, Python, Python] # 区分大小写 print(lt1.index(Python)) lt2 [PHP, python, Java, Python, JavaScript, C, Python, C] # 不包含结束索引对应的值输出结果为6 print(lt2.index(Python, 4, 7))5.7.5 列表推导式列表推导式提供了一种简明扼要的方法来创建列表。其语法格式如下[ 表达式 for语句 [, if 语句 [, for语句 ...] ] ]列表推导式的结构是在一个中括号里包含一个表达式之后是一个for语句然后是0个或多个if语句或for语句最后在这个以if语句和for语句为上下文的表达式运行完成之后返回一个新的列表。其执行顺序为左边第二个语句是最外层依次往右进一层左边第一条语句是最后一层。示例代码如下# 资源包\Code\chapter5\5.7\0541.py # 列表推导式的方式 lt1 [x * y for x in range(1, 5) if x 2 for y in range(1, 4) if y 3] # 输出结果为[3, 6, 4, 8] print(lt1) # 列表推导式的执行顺序 lt2 [] for x in range(1, 5): if x 2: for y in range(1, 4): if y 3: lt2.append(x * y) # 输出结果同样为[3, 6, 4, 8] print(lt2)