Python基础-3.列表
一、列表基本使用
列表的赋值
列表可以定义为空列表,以及任何数据类型的列表,列表没有特别规定里面的变量类型一直,甚至可以定义一个列表里面的变量类型各种各样。
Python中所有的赋值都是通过=符号进行赋值,如下所示:
# 创建一个空列表
test = []
# 定义赋值列表
list1 = ['red', 'green', 'blue', 'yellow', 'black']
list2 = [38, 24, 56, 6, 1, 66, 17]
list3 = ['google', 'baidu', 1997, 2023, 'baidu']
列表的取值
与字符串的索引一样,列表索引0开始,第二个索引是1,依此类推。
【示例】
list_data = ['apple', 'banana', 'orange', 'strawberry']
# 取list_data的第一个值
print('list_data的第一个值', list_data[0])
# 取list_data的第二个值
print('list_data的第二个值', list_data[1])
'''运行结果如下
list_data的第一个值 apple
list_data的第二个值 banana
'''
索引也可以从尾部开始,最后一个元素的索引为-1,往前一位为-2,以此类推。
【示例】
list_data = ['apple', 'banana', 'orange', 'strawberry']
# 取list_data的倒数第一个值
print('list_data的倒数第一个值', list_data[-1])
# 取list_data的倒数第二个值
print('list_data的倒数第二个值', list_data[-2])
'''运行结果如下
list_data的倒数第一个值 strawberry
list_data的倒数第二个值 orange
'''
列表的切片取值
跟字符串一样,列表也可以通过切片截取部分列表的值。
【示例】代码如下:
list_data = ['apple', 'banana', 'orange', 'strawberry', 'watermelon', 'lychee']
# 3-倒数第3的元素
print('获取第3个元素到倒数第3个元素:', list_data[2:-2])
# 4开始后面所有元素
print('获取第4个元素开始后面所有元素:', list_data[3:])
# 倒数第4开始前面所有元素
print('获取倒数第4个元素开始前面所有元素:', list_data[:-3])
'''运行结果如下
获取第3个元素到倒数第3个元素: ['orange', 'strawberry']
获取第4个元素开始后面所有元素: ['strawberry', 'watermelon', 'lychee']
获取倒数第4个元素开始前面所有元素: ['apple', 'banana', 'orange']
'''
列表可用内置函数
len():计算列表元素个数sorted():对列表进行排序max():列出列表元素最大值min():列出列表元素最小值list():将元组转换为列表
【示例】
list1 = ['red', 'green', 'blue', 'yellow', 'black']
list2 = [38, 24, 56, 6, 1, 66, 17]
list3 = ['google', 'baidu', 1997, 2023, 'baidu']
# 列表长度脚本操作符号使用len()
print('list1的长度为:', len(list1))
# 列表排序
print('list2排序后:', sorted(list2))
# 列表中最大最小值
print('list2中最大值为:', max(list2), 'list2中最小值为:', min(list2))
# 列表去重
print('list3去重后为:', list(set(list3)))
'''运行结果如下
list1的长度为: 5
list2排序后: [1, 6, 17, 24, 38, 56, 66]
list2中最大值为: 66 list2中最小值为: 1
list3去重后为: ['google', 'baidu', 1997, 2023]
'''
注意:set方法是定义一个集合,集合会自动去重,所以使用的过程中需要用list方法重新定义以下数据的类型为list列表。
二、列表操作
列表方法
list.append():在列表末尾添加新的元素list.count():统计某个元素在列表的个数list.extend():在列表末尾一次性追加另一个序列中的多个值list.index():从列表中找出某个值第一个匹配项的索引位置list.insert():在列表中插入元素list.pop():移除列表中的一个元素(默认最后一个元素),并且返回该元素的值list.remove():移除列表中某个值的第一个匹配项list.reverse():列出列表的反方向顺序list.sort():对列表进行排序list.clear():清除空列表list.copy():复制列表
添加元素
定义一个列表供下面示例使用:
fruits = ["apple", "banana"]
1.append()方法
通过append()方法在列表的末尾进行追加元素。
【示例】代码如下:
fruits.append('orange')
print('使用append()方法添加后的列表:', fruits)
'''运行结果如下
使用append()方法添加后的列表: ['apple', 'banana', 'orange']
'''
2.insert()方法
通过insert()方法在列表的指定位置插入元素,第一个参数就是指定的索引位置。
【示例】代码如下:
fruits.insert(1, 'strawberry')
print('使用insert()方法插入后的列表:', fruits)
'''运行结果如下
使用insert()方法插入后的列表: ['apple', 'strawberry', 'banana']
'''
3.extend()方法
还可以通过extend()方法扩展多个元素,相当于+=。
【示例】代码如下:
fruits.extend(['watermelon', 'lychee'])
print('使用extend()方法扩展后的列表:', fruits)
'''运行结果如下
使用extend()方法扩展后的列表: ['apple', 'banana', 'watermelon', 'lychee']
'''
删除元素
定义一个列表供下面示例使用:
fruits = ['apple', 'banana', 'orange', 'strawberry']
1.remove()方法
使用remove()方法按值进行删除,只删除匹配到的第一个元素。
【示例】代码如下:
fruits.remove("banana")
print('使用remove()方法删除banana元素后的列表:', fruits)
'''运行结果如下
使用remove()方法删除banana元素后的列表: ['apple', 'orange', 'strawberry']
'''
2.pop()方法
使用pop()方法按索引进行删除,默认删除最后一个。
【示例】代码如下:
fruits.pop(1)
print('使用pop()方法删除索引为1的元素后的列表:', fruits)
'''运行结果如下
使用pop()方法删除索引为1的元素后的列表: ['apple', 'orange', 'strawberry']
'''
3.del关键字
使用del关键字删除指定位置的元素。
【示例】代码如下:
del fruits[3]
print('使用del关键字删除索引为3的元素后的列表:', fruits)
'''运行结果如下
使用del关键字删除索引为3的元素后的列表: ['apple', 'banana', 'orange']
'''
4.clear()方法
使用clear()方法清空列表。
【示例】代码如下:
fruits.clear()
print('使用clear()方法清空后的列表:', fruits)
'''运行结果如下
使用clear()方法清空后的列表: []
'''
更新列表
定义一个列表供下面示例使用:
fruits = ['apple', 'banana', 'orange', 'mongo']
1.修改单个元素
【示例】代码如下:
fruits[1] = 'watermelon'
print('修改索引为1的元素值为watermelon后的列表:', fruits)
'''运行结果如下
修改索引为1的元素值为watermelon后的列表: ['apple', 'watermelon', 'orange', 'mongo']
'''
2.修改多个元素
【示例】代码如下:
fruits[1:3] = ['strawberry', 'lychee']
print("修改索引为1到3(不包含3)的元素值为['strawberry', 'lychee']后的列表:", fruits)
'''运行结果如下
修改索引为1到3(不包含3)的元素值为['strawberry', 'lychee']后的列表: ['apple', 'strawberry', 'lychee', 'mongo']
'''
遍历列表
定义一个列表供下面示例使用:
fruits = ['apple', 'banana', 'orange', 'strawberry']
可以使用for循环配合成员运算符in对列表进行遍历查询列表中的元素。
【示例】代码如下:
num = 1
for i in fruits:
print(f'第{num}个元素的值:', i)
num += 1
'''运行结果如下
第1个元素的值: apple
第2个元素的值: banana
第3个元素的值: orange
第4个元素的值: strawberry
'''
还有一种简便的方法不需要我们自己去计算索引,就是使用enumerate()函数,通过start=1参数就是计数以1为起点开始计数。
【示例】代码如下:
for index, value in enumerate(fruits, start=1):
print(f'第{index}个元素的值:', value)
'''运行结果如下
第1个元素的值: apple
第2个元素的值: banana
第3个元素的值: orange
第4个元素的值: strawberry
'''
我还想到了一种方法就是先使用len()方法获取列表的长度,再使用for循环这个长度的0到最后长度作为列表的索引值来获取所有的列表元素。
for i in range(len(fruits)):
print(f'第{i + 1}个元素的值:', fruits[i])
'''运行结果如下
第1个元素的值: apple
第2个元素的值: banana
第3个元素的值: orange
第4个元素的值: strawberry
列表运算
定义一个列表供下面示例使用:
a = ['apple', 2, 3.14, 'mongo']
b = ['mongo', 'strawberry', 'pear', 'apple']
c = ['pear', 'mongo', 'apple', 'strawberry']
d = ['watermelon', 'lychee', 'pitaya', 'durian']
e = ['pear', 'mongo', 'lychee', 'pitaya', 'apple', 'strawberry']
f = [3.14, 'lychee', 'apple', 'pitaya']
列表拼接
列表的拼接只需通过+或者-等算术运算符进行运算即可。
【示例】代码如下:
c_d = c + d
print('c和d拼接后的列表:', c_d)
'''运行结果如下
c和d拼接后的列表: ['pear', 'mongo', 'apple', 'strawberry', 'watermelon', 'lychee', 'pitaya', 'durian']
'''
列表比较
可以直接使用比较运算符==对列表之间进行比较。
【示例】代码如下:
print('b和c列表比较的结果:', b == c)
print('b和c列表排序后比较的结果:', sorted(b) == sorted(c))
'''运行结果如下
b和c列表比较的结果: False
b和c列表排序后比较的结果: True
'''
温馨提示:列表直接元素都是一样的但是顺序不一样都不能算列表相同,我们需要先对列表进行排序再进行比较。
特别注意:列表中存在不同类型的元素变量时不能进行排序,必须保持类型一致才能进行排序。
列表去重
我们可以使用set函数先把列表定义为集合,集合会自动去重,再用list函数定义为列表的方式来达到去重的作用。
【示例】代码如下:
a_c = a + c
print('a和c列表相加去重后的列表:', list(set(a_c)))
'''运行结果如下
a和c列表相加去重后的列表: [2, 3.14, 'strawberry', 'apple', 'mongo', 'pear']
'''
列表包含判断
列表可以使用成员运算符来判断列表是否存在包含关系。
【示例】代码如下:
print('判断列表e是否包含列表c:', c in e)
'''运行结果如下
判断列表e是否包含列表c: False
'''
使用推导式求出两个列表分别不存在的元素
【示例】这里以a和f两个列表为例,代码如下:
# 列出a中f没有的元素
data_a = [x for x in a if x not in f]
# 列出f中a没有的元素
data_b = [x for x in f if x not in a]
print(f'a中f没有的元素: {data_a}\nf中a没有的元素: {data_b}')
'''运行结果如下
a中f没有的元素: [2, 'mongo']
f中a没有的元素: ['lychee', 'pitaya']
'''
三、列表进阶使用
列表的复制
列表的复制分为浅拷贝和深拷贝。下面举个例子来说明列表在操作的情况下值的变化。
【示例】创建一个列表a,b复制等于a,操作列表a观察列表b的变化,再修改列表b同样观察列表a的值的变化
# 创建列表a,赋值b = a
a = [1, 2, 3]
b = a
print('a的值为:', a)
print('b的值为:', b)
# 修改a的值
a[1] = 88
print('a被修改后的值为:', a)
print('a被修改后b的值为:', b)
# 修改b的值
b[0] = 18
print('b被修改后a的值为:', a)
print('b被修改后的值为:', b)
'''运行结果如下
a的值为: [1, 2, 3]
b的值为: [1, 2, 3]
a被修改后的值为: [1, 88, 3]
a被修改后b的值为: [1, 88, 3]
b被修改后a的值为: [18, 88, 3]
b被修改后的值为: [18, 88, 3]
'''
b随着a的值的修改,也跟着被修改了,b = a只是让b和a指向同一块内存,并没有生成新列表。所以b和a随便修改哪个的值另外一个会跟着一起变。
浅拷贝
浅拷贝会生成一个新的列表对象,但里面的元素引用不变。
一般浅拷贝会用list.copy()、copy.copy()、list[:]方法。
【示例】使用list.copy()浅拷贝修改值验证
# 创建列表a,赋值b = a
a = [[1, 2], [3, 4]]
b = a.copy()
print('a的值为:', a)
print('b的值为:', b)
# 修改a的值
a[0][0] = 18
print('a被修改后的值为:', a)
print('a被修改后b的值为:', b)
# 修改b的值
b[1][1] = 88
print('b被修改后a的值为:', a)
print('b被修改后的值为:', b)
'''运行结果如下
a的值为: [[1, 2], [3, 4]]
b的值为: [[1, 2], [3, 4]]
a被修改后的值为: [[18, 2], [3, 4]]
a被修改后b的值为: [[18, 2], [3, 4]]
b被修改后a的值为: [[18, 2], [3, 88]]
b被修改后的值为: [[18, 2], [3, 88]]
'''
总结:对于浅拷贝来说,会发现无论是修改a还是b原列表里的子列表也被改了。
深拷贝
深拷贝会递归复制整个对象及其子对象,彻底独立。
深拷贝使用copy.deepcopy()方法即可。
【示例】使用copy.deepcopy()方法进行深拷贝进行验证
import copy
# 创建列表a,赋值b = a
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
print('a的值为:', a)
print('b的值为:', b)
# 修改a的值
a[0][0] = 18
print('a被修改后的值为:', a)
print('a被修改后b的值为:', b)
# 修改b的值
b[1][1] = 88
print('b被修改后a的值为:', a)
print('b被修改后的值为:', b)
'''运行结果如下
a的值为: [[1, 2], [3, 4]]
b的值为: [[1, 2], [3, 4]]
a被修改后的值为: [[18, 2], [3, 4]]
a被修改后b的值为: [[1, 2], [3, 4]]
b被修改后a的值为: [[18, 2], [3, 4]]
b被修改后的值为: [[1, 2], [3, 88]]
'''
总结:发现深拷贝无论修改谁的值都不会互相影响,a和b是两个独立的列表。
列表嵌套
列表中可以是任何类型的元素,除了常见的数字、浮点、字符串等数据类型,还可以是列表本身、字典等数据类型。
【示例】定义列表的元素为列表、字典或者混合
# 元素为列表
a = [[1, 2], [3, 4], [5, 6]]
# 元素为字典
b = [{'key1':'value1', 'key2':'value2'}, {'key3':'value3', 'key4':'value4'}]
# 元素为混合类型
c = [3.14, ['lychee', 'pitaya'], 'apple', {'key': 'value'}, 18]
四、字符串列表转换
join方法
可以用使用join()方法来将列表转化成字符串。
【示例】列表转化成字符串并以,符号隔开
a = ['red', 'green', 'blue', 'yellow', 'black']
data = ','.join(a)
print(data)
'''运行结果如下
red,green,blue,yellow,black
'''
split方法
字符串也可以使用split()方法来生成列表。
【示例】以,符号为隔断,将字符串生成列表
a = 'red,green,blue,yellow,black'
data = a.split(',')
print(data)
'''运行结果如下
['red', 'green', 'blue', 'yellow', 'black']
'''