Python学习笔记(3-2):内置数据结构之列表

在这里插入图片描述

文章导读

 - 课程难度:★★☆☆☆
 - 预计学习时间: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 'strTrue
True
True
True

二、列表的访问与切片

1、列表的访问

一维列表的元素直接用下标访问,多维列表先访问高纬度的下标,再访问低维度的下标,示例如下:

## 一维
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

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]

三、列表的修改

字符串是不可变的,即我们原来在切片引用字符串时,并不能改变它的值,但是列表是可变的,我们可以对列表元素根据下标或切片访问出来并进行修改:

1、修改列表中的一个元素——根据下标

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]

2、修改列表中的某些元素——修改切片

(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、列表的拼接:+、.extend()

(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]

2、列表的复制:*

* 可以实现列表的复制,数字在前面在后面都可以。

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]

3、列表追加元素:append()、insert()

相比之前的+和.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]

4、列表删除元素:.pop(),.remove()函数

(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】

5、列表计数:.count()函数

.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

6、查看元素是否在列表中:in和not in

与字符串相似:

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

7、返回指定元素的索引:.index()

该函数的实现方式为: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值