Python学习笔记-常用数据结构(列表list&常用内置方法)

271 阅读5分钟

列表

列表是python中常用的数据类型,是一种结构化的、非标量类型,它是值的有序序列,每个值都可以通过索引进行标识,定义列表可以将列表的元素放在[]中,多个元素用,进行分隔,列表的数据项不需要有相同的类型,如下所示:

list_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 列表内数据使用逗号分隔
list_2 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

1.1 列表索引

列表与字符串索引一致,索引都是从0开始,第二个索引是1,依此类推,通过索引可以对列表进行截取和组合操作。

image.png

# 索引操作和字符串类型一致
list_1 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print(list_1[0])  # red
print(list_1[1])  # green
print(list_1[1:3])  # ['green', 'blue']

1.1.1反向索引

索引也可以从尾部进行索引,最后一个元素的索引为-1,依此类推。

image.png

# 反向索引
list_1 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print(list_1[-1])  # black
print(list_1[-2])  # white
print(list_1[::-1])  # ['black', 'white', 'yellow', 'blue', 'green', 'red']

Tips:需要注意列表内存的数据是什么类型取出后也是什么类型~

image.png

说明:部分图片引用于python菜鸟教程,如有侵权,请告知我,我会删除。

1.2 遍历列表

列表可以使用for循环对列表元素进行遍历。

1.2.1 通过循环用下标遍历列表元素

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 通过循环用下标遍历列表元素
for index in range(len(list_1)):
    print(list_1[index])

image.png

1.2.2 通过for循环遍历列表元素

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 通过for循环遍历列表元素
for elem in list_1:
    print(elem)

image.png

1.2.3 通过内置方法enumerate()处理后遍历列表

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值,部分场景会用到,所以进行记录
for index, elem in enumerate(list_1):
    print(index, elem)

image.png

1.3 列表元素添加&修改

1.3.1 添加元素

append()方法是末尾进行添加元素

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 使用内置方法append()进行添加
list_1.append('更新元素')
print(list_1)  # [1, 1.1, {'name': 'Mickey'}, '列表', False, '更新元素']

insert()方法则可以指定位置添加元素,需要注意insert方法需要传递两个参数,一个需要添加位置的索引和添加元素。

image.png

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 使用内置方法insert()进行添加,可以看出元素添加到了指定位置
list_1.insert(0, '更新元素')
print(list_1)  # ['更新元素', 1, 1.1, {'name': 'Mickey'}, '列表', False]

P.S.有没有大佬知道为什么索引-1的时候添加到了-2的索引,万分感激🙏 image.png

1.3.2 修改元素

修改元素的话,是比较简单的,通过索引进行修改即可。

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 修改元素
list_1[2] = {"name": "Minnie"}
list_1[2]['name'] = 'Minnie'
print(list_1)  # [1, 1.1, {'name': 'Minnie'}, '列表', False]
# 也可以修改成其他类型
list_1[2] = 'Mickey'
print(list_1)  # [1, 1.1, 'Mickey', '列表', False]

1.4 列表元素删除

列表内的元素是可以进行删除操作的。

1.4.1 del删除

del是python语句而不是列表的函数,无法通过list调用。del删除是通过列表索引进行删除操作的。

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# del删除元素
del list_1[0]  # [1.1, {'name': 'Mickey'}, '列表', False],删除第一个元素
del list_1[0:2]  # [{'name': 'Mickey'}, '列表', False],删除前两个元素
del list_1[-1]  # [1, 1.1, {'name': 'Mickey'}, '列表'],删除最后一个元素
del list_1[::]  # [],全部删除

1.4.2 列表内置方法remove()删除

remove()是通过元素进行删除的,和del通过索引删除是有区别的,注意区分!!!

补充:如果列表有多个相同元素的话,只会删除第一个匹配项

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 内置方法`remove()`删除
list_1.remove(1.1)
print(list_1)  # [1, {'name': 'Mickey'}, '列表', False]

Tips:使用remove()方法时需要注意元素是否存在,如果不存在的话,进行操作会报ValueError: list.remove(x): x not in list的错误。例如:

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 内置方法`remove()`删除
list_1.remove(1.1)  # 此时已经把【1.1】元素删除了,在删除的话会报错。
list_1.remove(1.1)  # ValueError: list.remove(x): x not in list,需要注意如果元素不存在时会报【x不在列表中】的错误

所以我们可以在删除列表元素的时候加了一个判断元素是否存在即可避免此问题,例如:

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 内置方法remove()删除
list_1.remove(1.1)  # 此时已经把【1.1】元素删除了

# 此处加上一个元素是否存在的判断就可以正常执行了~
if '1.1' in list_1:
    list_1.remove(1.1)
print(list_1)  # [1, {'name': 'Mickey'}, '列表', False]

1.4.3 列表内置方法pop()删除

pop()可以获取并删除指定位置元素。需要注意的是pop方法是有默认值的,默认删除-1索引的值。 image.png

list_1 = [1, 1.1, {"name": "Mickey"}, "列表", False]  # 列表内可以存任意数据类型

# 内置方法pop()删除
list_1.pop()  # [1, 1.1, {'name': 'Mickey'}, '列表'],默认删除-1索引的元素
list_1.pop(0)  # [1.1, {'name': 'Mickey'}, '列表', False]

Tips:其实pop方法还可以用来获取指定位置的元素,获取完成后元素会在列表删除。实际在上面pop方法的源码也可以看出来,pop方法是有返回值的~ image.png

1.5 常用内置方法

方法名描述
append()在列表末尾添加新的对象
count()统计某个元素在列表中出现的次数
index()从列表中找出某个值第一个匹配项的索引位置
insert(index,obj)将对象插入列表
pop(index=-1)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
remove(obj)移除列表中某个值的第一个匹配项
clear()清空列表
copy()复制列表

个人学习记录笔记,非商业用途,如有侵权,请告知我,我会删除。