文章导读
- 课程难度:★★☆☆☆
- 预计学习时间:1小时
- 简介:本节主要讲解了Python内置数据结构中列表数据的相关基础知识及常用的方法函数,包括:(1)列表的定义及一些基础知识,如利用list()函数其他数据转成列表格式、列表的嵌套及比较等;
(2)利用下标或切片的方式访问列表中的某个或某些元素;(3)基于访问和切片后对列表的修改操作;(4)列表常用的一些函数方法,如列表的拼接、复制、追加和删除元素、列表计数、查看元素是否在列表中以及如何查看指定元素的索引等。
- 重点涉及的函数和内容:(1)列表的访问、切片与修改操作;(2)列表间的拼接使用 加号+和extend()函数,而往列表中追加元素使用append()和insert()函数;
(3)利用pop()、remove()函数删除列表中的元素;(4)各函数和方法是否会修改原值以及是否有返回值的问题;
1、列表用方括号 [ ]
定义,之中的元素用逗号 ,
分隔。
2、列表的内部允许有多个不同类型的元素;列表为可变数据类型,因此允许对内部元素进行修改。
3、定义一个列表时,允许最后一个逗号后没有值,此时会忽略掉这个逗号。
a = [1, 2, 3, ]
print(a)
输出结果如下:
[1, 2, 3]
4、列表在定义的时候,可以换行。
a = [1, 2, 3, 4,
5, 6, 7, 8] # 定义一个较长的一维列表
b = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],] # 定义一个3 * 4的二维列表
print(a)
print(b)
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
换行的特性可以在定义列表时让我们定义的数据相对直观。因为3和4两点对于后续的元组、集合、字典等等数据格式都适用。
5、嵌套列表
因为列表可以包含各种各样的元素,自然而然地,列表就能够包括列表,这就是我们所谓的多维列表,或者是列表的嵌套,示例如下:
a = [1, 2, 3, [4, 5, 6]]
print(len(a)) # 它的长度是4,前面三个值是数值,最后一个值是列表。
for i in a:
print(i)
输出结果如下:
4
1
2
3
[4, 5, 6]
6、list()
函数,将其他类型的数据转为列表。
7、len()
函数,计算列表的长度,列表的长度是列表内元素的个数,不考虑列表内某个元素(例如列表或numpy数组)的长度。
a = range(10)
list_a = list(a)
print(a, list_a)
a = [1, 2, 3, 4, 5]
print(len(a))
输出结果如下:
range(0, 10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5
8、list的比较:
比较规则也和字符串的比较规则相同
(1)首先同时取出第一个元素比较,如果相同,接着取出第二个元素比较,一直比较到最后一个。比较规则按照各种元素自己的比较规则进行。
(2)如果出现第一个大于或小于关系,就返回这个大于或小于的结果;
(3)如果在出现大于或小于关系前,出现第一个不可比(如字符串和数字、字符串和列表)关系,就会报错。
(4)如果两个列表不等,但一直比到最后一个可比元素都一样,那么认为长的较大,如果两个列表等长且每个元素都对应相等,那么认为两列表相等。
具体示例如下:
print([2, 2, 3, 1, 10] < [2, 9, 5, 8, 3]) # 比较到第二个元素时出现小于关系
print([10, 8, 3, 1, 10] > [10, 'string', 5, 8, 3]) # 报错1,第二个元素不可比
print([1, 2, 3, 4, 5, 0] > [1, 2, 3, 4 ,5]) # 比较结果一直相等,但左边列表较长
print([1, 2, 3, 4, 5, 'True'] > [1, 2, 3, 4, 5])
print([1, 2, 3, 4, 5] == [1, 2, 3, 4, 5]) # 两个列表等长且对应相等
print([1, 3, '123'] == [1, 3, '123'])
输出结果如下:
True
报错1【TypeError: '>' not supported between instances of 'int' and 'str】
True
True
True
True
一维列表的元素直接用下标访问,多维列表先访问高纬度的下标,再访问低维度的下标,示例如下:
## 一维
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[0], a[1], a[2]) # 在numpy数组中,支持a[0,1]这样的访问形式,
# 但是列表中没有,需要一层一层地访问。
## 多维列表
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(a[0][1]) # 列表a的第一个元素(一个列表)下的第二个元素
输出结果如下:
1 2 3
2
与字符串的访问相似,语法格式为:lst[start: end: step]
,start为切片开始的位置(默认为0),end为切片截止(但不包含)位置(默认为列表长度),step为切片的步数(默认为1),省略步长时可省略第二个冒号。step为负整数时,表示反向切片(从右往左访问)。示例如下:
(1)step为默认值1(连续性访问)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[2:5])
print(a[:5])
print(a[2:])
print(a[:])
输出结果如下:
[3, 4, 5]
[1, 2, 3, 4, 5]
[3, 4, 5, 6, 7, 8, 9, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
(2)step不为1(跳跃式访问)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
print(a[::1]) #访问整个列表,步长为1
print(a[::2]) #访问整个列表,步长为2
print(a[::3]) #访问整个列表,步长为3
print(a[::-2]) #反向访问整个列表,步长为2
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[1, 4, 7, 10, 13, 16, 19]
[20, 18, 16, 14, 12, 10, 8, 6, 4, 2]
字符串是不可变的,即我们原来在切片引用字符串时,并不能改变它的值,但是列表是可变的,我们可以对列表元素根据下标或切片访问出来并进行修改:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[3] = -1
a[5] = -2
print(a)
输出结果如下:
[1, 2, 3, -1, 5, -2, 7, 8, 9, 10]
(1)修改连续性切片:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[3:7] = [-1, -2, -3, -4]
print(a)
输出结果如下:
[1, 2, 3, -1, -2, -3, -4, 8, 9, 10]
(2)修改跳跃式切片:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[5::-2] = [-1, -2, -3] # 从这个结果可以观察列表元素的修改顺序
print(a)
输出结果如下:
[1, -3, 3, -2, 5, -1, 7, 8, 9, 10]
需要注意的是,列表的访问只能通过单一的索引值和切片,不能通过传递一个列表来进行多个元素的访问。如下面的访问方式就是错的,会报出如下错误信息。但是在下两章所讲numpy数组和pandas DataFrame有相应的用法
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[[1, 2, 3]] # 报错1,列表仅支持下标和切片访问
# 报错1【TypeError: list indices must be integers or slices, not list】
接下来我们讲列表的常用方法,包括列表的拼接、复制、增添、删除、包含(不包含)、列表计数、元素排序等功能。这些功能主要应用了一些运算符、列表对象的成员函数和关键字,在此面向功能进行逐一讲解
(1)+
加号
该方法不改变原列表的数据。之前在字符串的讲解中提到过,+
可以拼接字符串与字符串、列表与列表、元组与元组,也就是说,列表和数字、字符串等其他格式不能直接拼接,要用方括号[]
括起来,将它做成一个列表,以下的代码便会报错:
a = [1, 2, 3, 4, 5]
b = 6
print(a + b) # 报错1:只有列表能和列表拼接
# 错误1【TypeError: can only concatenate list (not "int") to list】
正确的做法需要将b括起来,把b也做成一个列表
a = [1, 2, 3, 4, 5]
b = [6]
print(a + b)
输出结果如下:
[1, 2, 3, 4, 5, 6]
(2).extend()
该方法会改变原列表;不返回结果,我们分别应用 +
和.extend()
函数观察效果:
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
print(a + b)
print(a, b)
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
print(a.extend(b))
print(a, b)
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5] [6, 7, 8, 9, 10]
None
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [6, 7, 8, 9, 10]
由于a.extend(b)
没有返回结果,因此不能拿它的返回结果立即拼接下一个list,例如如下的代码会报错:
a, b, c = [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]
print(a.extend(b).extend(c)) # 报错1,.extend()类似的处理方式就会报错
输出结果如下:
# 报错1【AttributeError: 'NoneType' object has no attribute 'extend'】
利用extend
拼接多个list,只能按照如下的方式依次拼接:
a, b, c = [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]
a.extend(b)
print(a)
a.extend(c)
print(a)
输出结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
用 *
可以实现列表的复制,数字在前面在后面都可以。
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
print(a * 2)
print(3 * b)
输出结果如下:
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
[6, 7, 8, 9, 10, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10]
相比之前的+和.extend()函数,.append()
函数和.insert()
函数追加的都是元素,而且也会修改原列表,没有返回值。
(1)append()
实现方式为:lst.append(x)
,即把x加在列表lst的最后,示例如下:
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
c = 11
a.append(b)
print(a)
a.append(c)
print(a)
输出结果如下:
[1, 2, 3, 4, 5, [6, 7, 8, 9, 10]]
[1, 2, 3, 4, 5, [6, 7, 8, 9, 10], 11]
(2)insert()
与append()函数相比,该函数多了一个位置参数,实现方式为:lst.insert(index,x)
,即把x加在列表lst的index位置
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
c = 11
a.insert(1, b)
print(a)
a.insert(1, c)
print(a)
输出结果如下:
[1, [6, 7, 8, 9, 10], 2, 3, 4, 5]
[1, 11, [6, 7, 8, 9, 10], 2, 3, 4, 5]
(1).pop()
函数
pop()函数是与.insert()函数恰好相反的函数,删除指定下标的元素,实现方式:lst.pop(index)
,即删除并返回列表lst中下标为index’的元素;不传参时默认删除最后一个元素。
a = [1, 2, 3, 4, 5]
print(a.pop())
print(a)
a = [1, 2, 3, 4, 5]
print(a.pop(2))
print(a)
输出结果如下:
5
[1, 2, 3, 4]
3
[1, 2, 4, 5]
(2).remove()
函数
该方法是用于删除指定值的元素,实现方式为:lst.remove(x)
,即删除列表lst中第一个值为x的元素,没有返回值。它只删除第一个找到的指定值。同时,如果列表中已经没有这个值,函数会报错。
a = [2, 4, 6, 8, 10, 2, 4, 6]
a.remove(2)
print(a)
a.remove(2)
print(a)
a.remove(2) # 报错1,在删除两次2之后,列表a中没有2了
print(a)
输出结果如下:
[4, 6, 8, 10, 2, 4, 6]
[4, 6, 8, 10, 4, 6]
# 报错1【ValueError: list.remove(x): x not in list】
.count()
用于统计一个数字在列表中出现的次数,返回值是出现的次数,没有出现过则返回0:
a = [1, 2, 3, 4, 5, 1, 2, 2, 3]
b = [1, 2, 3, 4, 8, 1, 8, 2, 3]
print(a.count(8))
print(b.count(8))
输出结果如下:
0
2
与字符串相似:
a = [1, 2, 3, 4, 5]
print(1 in a, 6 in a, 1 not in a, 6 not in a)
输出结果如下:
True False False True
该函数的实现方式为:lst.index(x)
,用于返回元素x
在列表lst
中首次出现的位置,如果列表中不存在x,将会报错。示例如下:
lst = [1,2,2,3,3,3,4,4,4,4]
print(lst.index(4))
print(lst.index(5)) #报错,提示5 is not in list
输出结果如下:
6
ValueError: 5 is not in list
对于缺乏Python基础的同仁,可以通过免费专栏《Python学习笔记(基础)》从零开始学习Python
请始终相信“Done is better than perfect”
,不要过分追求完美,即刻行动就是最好的开始, 一个模块一个模块地积累和练习,必将有所收获。
还有其他的问题欢迎在评论区留言!
[版权申明] 非商业目的注明出处可自由转载,转载请标明出处!!!
博客:butterfly_701c