一、列表简介
1.1 列表是什么?
列表由一系列特定 顺序排列 的 元素 组成。列表类似于C语言的数组,但是比数组高级,列表中的类型没有限制。可以包含各种类型。
例如:
>>> list = [1,'hello'] >>> list [1, 'hello']
1.2 访问列表元素
列表是一个有序的数据集合。访问时只需指出列表的名称,然后将某个要访问元素的位置或索引告诉 Python 即可。
例如:
>>> list[0] 1
注意列表元素的索引时从 0 开始的而不是 1 开始(这点倒是和C语言数组类似)
1.3 列表的增删改
修改:
>>> list[0] = 300 >>> list[0] 300
增加:
在列表末尾添加元素 append()
>>> list.append("world") >>> list [300, 'hello', 'world']
在列表中插入元素
>>> list.insert(0,'Just insert') >>> list ['Just insert', 300, 'hello', 'world']
删除:
1.使用 del 语句删除元素,使用 del 可以删除任何位置的列表元素,条件是知道其索引。
>>> del list[1] >>> list ['Just insert', 'hello', 'world']
2.使用 pop() 方法 删除元素,pop() 可删除列表末尾的元素,并让你能够接着使用它(就是可以将删除的列表元素交给另外一个变量)。
>>> pop_list = list.pop() >>> list ['Just insert', 'hello'] >>> pop_list 'world'
3.使用pop() 来删除列表中任何位置的元素。
>>> list.pop(0) 'Just insert' >>> list ['hello']
4.根据值来删除元素。如果你只知道要删除的元素的值,你可以使用方法 remove() 来实现你的删除元素功能。
>>> list.remove('hello') >>> list [] >>>
1.4 组织列表/列表的排序
1.使用方法 sort() 对列表进行永久性排序
>>> cars = ['bmw', 'audi' ,'toyota' , 'subaru'] >>> cars ['bmw', 'audi', 'toyota', 'subaru'] >>> cars.sort() >>> print(cars) ['audi', 'bmw', 'subaru', 'toyota']
如上所示,sort() 默认是按照字符顺序排序的。如果要倒序排列,可加参数 reverse = True
>>> cars = ['bmw','audi','toyota','subaru'] >>> cars ['bmw', 'audi', 'toyota', 'subaru'] >>> cars.sort(reverse = True) >>> cars ['toyota', 'subaru', 'bmw', 'audi']
2.使用函数 sorted() 对列表进行临时排序
如果你想保留原有的列表排列顺序,但是又想按照某种顺序呈现它们,你可以选择 sorted()。
>>> cars = ['bmw','audi','toyota','subaru'] >>> cars ['bmw', 'audi', 'toyota', 'subaru'] >>> sorted(cars) ['audi', 'bmw', 'subaru', 'toyota']
同样如果要倒序加参数 reverse = True 即可。
3.倒着打印列表(没有排序,只是调整前后输出,反转列表元素,此输出会永久修改列表顺序)
>>> cars ['bmw', 'audi', 'toyota', 'subaru'] >>> cars.reverse() >>> print(cars) ['subaru', 'toyota', 'audi', 'bmw']
4.获取列表的长度 len()
>>> cars ['subaru', 'toyota', 'audi', 'bmw'] >>> len(cars) 4
1.5 列表访问的错误
1.列表访问时注意列表索引是从 0 开始的,不要超过可访问的索引上限。
2.列表访问最后一个元素可以使用索引 -1 ,但是要注意列表一定不能是空的,否则报错。
二、操作列表
2.1.遍历整个列表
如果你想对列表中的元素进行某个相同或者不同的操作,你就可能会用到循环。这里先介绍for循环:
>>> magicians = ['alice', 'david', 'carolina'] >>> for magician in magicians: print(magician) alice david carolina
注:python是区分大小写的,所以关键字 for 和 in 必须保证小写。
循环是计算机自动完成重复工作的常见方式之一。例如上述 for 循环示例,首先会将列表 magicians 中的第一个元素赋给变量 magician,然后执行打印操作,将magician的值打印出来。紧接着会继续将第二个元素一直到最后一个元素将 magicians 所有元素全部依次赋值给变量 magician 然后打印出来。
PS:这里变量的命名使用单数和复数形式是一个不错的习惯。
注意:Python是一个利用缩进来判断代码行关系的,所以编写时一定要注意行与行之间的缩进关系。缩进让代码更易读,它要求你使用缩进让代码整洁而结构清晰。
2.2.创建数值列表
2.2.1.使用 range() 函数
>>> for value in range(1, 5): print(value) 1 2 3 4
使用 range() 可以轻松获取指定范围的整型(Integer)数字,但是范围并不包含第二参数值。如上所示,range(1, 5) 只会取 1~4 之间的数据,要想打印出 5 ,就必须是 range(1, 6)
2.2.2.如何使用 range() 函数创建列表:
>>> numbers = list(range(1, 6)) >>> print(numbers) [1, 2, 3, 4, 5]
如上所示,要使用 range() 函数来创建列表,用 list() 即可。
range() 函数在使用时还可以添加步长:
>>> numbers = list(range(1, 6, 2)) >>> print(numbers) [1, 3, 5]
2.2.3.对于数字类型的列表我们使用如下函数来找其中的最大值,最小值和总和:
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] >>> max(digits) 9 >>> min(digits) 0 >>> sum(digits) 45
2.2.4.列表解析
列表解析将 for 循环和创建元素的代码合并一行,并自动附加新元素。
>>> squares = [value ** 2 for value in range(1, 11)] >>> print(squares) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
注:“**2”表示平方值,“**3”表示立方值。
2.3.列表切片
只使用列表部分元素的方法。Python 称之为 切片。
要创建切片,可指定要使用的第一个元素和最后一个元素的索引(列表的索引是从0开始的)。与函数 range() 一样。Python 在到达你指定的第二个元素前面的元素后停止。如果你要输出列表前三个元素,你就必须指定索引 0~3,这将输出分别为 0 、1、2 的元素。
>>> squares = [value ** 3 for value in range(1, 11)] >>> print(squares[0:3]) [1, 8, 27]
切片的第一个参数默认是列表开始的索引,第二个参数默认是列表结尾的索引。第一个参数可以给负数(第一个参数给负值后,第二个参数只能为空) ,表示从末尾开始取负数绝对值个元素。第二参数也可以给负数(第一个参数小于必须列表最大索引值减去从列表倒数第二个参数绝对值处索引值),表示取从第一个参数索引开始到结尾处倒数第负数绝对值索引范围内的元素。
>>> print(squares[:]) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] >>> print(squares[-3:]) [512, 729, 1000] >>> print(squares[:-3]) [1, 8, 27, 64, 125, 216, 343] >>> print(squares[-3:5]) [] >>> print(squares[-3:3]) [] >>> print(squares[-3:1]) [] >>> print(squares[-3:0]) [] >>> print(squares[-3:]) [512, 729, 1000] >>> print(squares[-3:-3]) [] >>> print(squares[1:-3]) [8, 27, 64, 125, 216, 343] >>> print(squares[10:-3]) [] >>> print(squares[len(squares) - abs(-3) - 1:-3]) [343] >>> print(squares[len(squares) - abs(-3):-3]) []
利用切片复制列表,如果你想利用已有的列表元素重新新建一个列表就必须用到切片。普通的赋值是不行的,普通的赋值只是将当前列表的列表地址赋给了新增的列表,并未新增一个拥有独立内存地址的列表。
>>> numbers = squares >>> print(numbers) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] >>> squares.append(0) >>> print(numbers) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 0] >>> print(squares) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 0] >>> numbers = squares[:] >>> numbers.append(101) >>> print(numbers) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 0, 101] >>> print(squares) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 0]0
2.4.元组
列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元祖可以满足这种需求。Python 将不能修改的值称为 不可变的,而不可变的列表 被称为 元组。
2.4.1.定义元组
元组看起来犹如列表,但使用的是 圆括号 而不是 方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
>>> tuple = (200, 50) >>> print(tuple[1]) 50 >>> tuple[1] = 60 Traceback (most recent call last): File "<pyshell#102>", line 1, in <module> tuple[1] = 60 TypeError: 'tuple' object does not support item assignment
2.4.2.元组的遍历
元组的遍历和列表一样也可以使用for。
>>> numbers = (200, 50) >>> for number in numbers: print(number) 200 50
2.4.3.元组的修改
元组的元素虽然不能修改,但是我们可以通过修改元组变量来实现元组的修改。
>>> numbers = (200, 50) >>> print(numbers) (200, 50) >>> numbers = (200, 60) >>> print(numbers) (200, 60)