Python列表对象list入门

班里成立了一支篮球队,最初由 Tim5 名同学组成。 如何对篮球队员进行管理呢? 学完本节的 列表对象 ,这个问题对你来说将是小菜一碟。

概述

列表 ( list ) 是 Python 的基本数据类型之一,它是一种 有序集合 ,用 []元素 围起来,元素间以 逗号 分隔。 例如, [1, 2, 3, 4, 5] 就是一个 list

1
2
>>> [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

该列表中保存了 5 个数字,像这种用于存储数据的对象,被称为 容器对象

那么,怎么用 list 来管理球队成员呢? 我们可以用一个 list 来存储这些同学的信息:

1
>>> team = ['Tim', 'Jim', 'Tom', 'Paul', 'Mike']

现在, team 变量保存了一个 listlist 里的每个元素对应的是每个同学的名字:

1
2
>>> team
['Tim', 'Jim', 'Tom', 'Paul', 'Mike']

索引

list 是一个有序列表,可以想象成由一系列槽位组成,槽位可以存储数据。 每个槽位都有一个唯一的编号,称为 索引 ( index ) 或者 下标list 的下标从 0 开始,即第 1 个元素的下标是 0 ,第 2 个元素的下标是 1 ,依此类推。

我们可以通过下标,取出对应元素。 例如, Tim 是列表中的第 1 个元素,下标为 0 。 因此,我们可以这样来访问:

1
2
>>> team[0]
'Tim'

负数下标

我们在描述某个元素时,除了 第几个元素 这种表达方式, 倒数第几个元素 也很常用。 例如, Paul 在列表中是第 4 个元素,同时也是倒数第 2 个元素。 列表用 负数下标 来表示元素倒数的位置,因此倒数第 2 个元素可以这样访问:

1
2
>>> team[-2]
'Paul'

值得注意的是,负数下标,从 -1 开始,从右往左 递减

切片

除了按照各自的下标查找单个元素,我们还可以指定下标范围,取出范围内的元素。 比如,我们现在要取出第 2-4 个元素:

1
2
>>> team[1:4]
['Jim', 'Tom', 'Paul']

需要注意的是,由于元素的下标是从 0 开始。 那么第 2 个元素,下标应该是 1 ;第 4 个元素,下标则是 3 。 既然如此,为什么代码是 team[1:4] 呢?其实,取值范围 [1:4] ,相当于数学上一个左闭右开的区间,即 [1,4)。 因此,范围 [1:4] 所代表的就是第 2-4 个元素。

当然,球队的队员并不是固定的,可能会有新同学加入,也可能会老队员退出。 那么,如何对 list 进行修改呢? 这就需要借助 list 的内置函数来帮助我们完成操作了。

追加

Tim 介绍他的朋友 Billy 加入球队,我们使用 append 函数,往列表尾部添加新元素:

1
>>> team.append('Billy')

Billy 是待添加元素,作为参数传给 append 函数。 这样一来, Billy 就在 list 里面了:

1
2
>>> team
['Tim', 'Jim', 'Tom', 'Paul', 'Mike', 'Billy']

特别注意,append 函数将新元素添加到列表末尾:

合并

班里有几名女同学也很喜欢打篮球,她们组成了自己的小团体 basketball_girls

1
2
3
>>> basketball_girls = ['Lucy', 'Jessica', 'Alice']
>>> basketball_girls
['Lucy', 'Jessica', 'Alice']

为了与男同学切磋球技,她们想加入到班级篮球队中。 我们可以使用 extend 函数,将列表 basketball_girls 加到列表 team 里面去:

1
2
3
>>> team.extend(basketball_girls)
>>> team
['Tim', 'Jim', 'Tom', 'Paul', 'Mike', 'Billy', 'Lucy', 'Jessica', 'Alice']

注意到,extend 函数,将待合并的列表,追加到原列表的末尾:

更改

学期末了,Paul 由于备考退出了球队,他找来好朋友 Bob 顶替自己。 这时,我们需要将 Paul 的位置替换成 Bob 。 首先,使用 index 函数,找出 Paul 的下标:

1
2
3
>>> i = team.index('Paul')
>>> i
3

我们将找到的下标保存到变量 i 中,访问 i ,发现 Paul 的下标是 3 。 现在,验证下这个下标是否正确。 由于我们将下标保存在变量 i 中,因此也可以这样取出元素的值:

1
2
>>> team[i]
'Paul'

正确无误!接下来,将 Paul 替换成 Bob :

1
>>> team[i] = 'Bob'

再次访问变量 team ,看到下标为 3 的位置已经替换成 Bob 了:

1
2
>>> team
['Tim', 'Jim', 'Tom', 'Bob', 'Mike', 'Billy', 'Lucy', 'Jessica', 'Alice']

删除

Tom 也想退出球队,但是却找不到其他人来替换自己。 这时,我们借助 remove 函数,从列表中删除 Tom 的信息。 remove 函数将待删除的元素作为参数:

1
>>> team.remove('Tom')

查看 team 变量,Tom 的名字已经被删除了:

1
2
>>> team
['Tim', 'Jim', 'Bob', 'Mike', 'Billy', 'Lucy', 'Jessica', 'Alice']

另外,还可以调用 pop 函数来删除元素。 与 remove 函数不同的是,pop 函数接收的参数是待删除元素的下标。 Tom 是列表中的第 3 个元素,下标是 2 。因此,执行如下代码,也可以将 Tom 从列表中删除:

1
>>> team.pop(2)

pop 函数也可不指定任何参数,默认将删除并返回列表中的最后一个元素,等价于:

1
>>> team.pop(-1)

举个例子,我们对 team 执行 pop 操作:

1
2
3
4
5
6
>>> team
['Tim', 'Jim', 'Bob', 'Mike', 'Billy', 'Lucy', 'Jessica', 'Alice']
>>> team.pop()
'Alice'
>>> team
['Tim', 'Jim', 'Bob', 'Mike', 'Billy', 'Lucy', 'Jessica']

看,Alice 被删除了!

排序

我们还可以调用 sort 函数,对列表中的元素进行排序:

1
>>> team.sort()

那是按照什么规则来排序的呢?我们来观察一下排序后的列表:

1
2
>>> team
['Billy', 'Bob', 'Jessica', 'Jim', 'Lucy', 'Mike', 'Tim']

可以看到,列表中的元素排序规则如下:

  • 比较首字母,字母小的排在前面;
  • 首个字母相同,则比较第二个字母,字母小的排在前面;
  • 依此类推,直到比较出大小;

那如果列表中存储的元素是数字呢? 按照上述的排序规则,猜测应该是从小到大排序。 事不宜迟,我们马上来实验一把:

1
2
3
4
>>> num = [2, 33, 4, 12, 5]
>>> num.sort()
>>> num
[2, 4, 5, 12, 33]

果不其然,真是按从小到大排序!

那如果要从大到小排序,有什么办法吗? sort 函数提供了一个开关,可以让我们选择排序规则。 将 reverse 参数赋值为 True ,使用 从大到小 规则排序:

1
>>> team.sort(reverse=True)

访问 team,元素已经按从大到小排序了:

1
2
>>> team
['Tim', 'Mike', 'Lucy', 'Jim', 'Jessica', 'Bob', 'Billy']

小结

这一节,我们学到了很多关于 list 的概念及操作:

  1. 列表 ( list ) 是一种 有序 集合;
  2. list.append(element) :用于追加单个元素;
  3. list.extend([element1, element2, …, elementN]) : 用于合并另外一个列表;
  4. list.index(element) :用于获取指定元素的下标;
  5. list.remove(element) :以 待删除元素 为参数,删除指定元素;
  6. list.pop() :删除并返回列表中最后一个元素;
  7. list.pop(index) :以 待删除元素下标 为参数,删除并返回指定元素;
  8. list.sort() :对列表中的元素进行排序;

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: