前言
前面讲解了python当中最常用的两种单体数据结构-数值型和字符串类型,每个数据值只能表示单个信息,比如一个人的姓名(字符型)、年龄(数值型),可以定义单个变量进行存储和使用,非常方便,如果要管理的数据很多的时候,按照之前方式,需要定义大量的变量来进行使用,程序就会显得很臃肿和难以阅读,
面对这个问题的时候,我们就要思考一个问题,能否把这些数据放到一个类似容器的东西里面,进行统一化管理,这个在python当中是可以的。这个就是本博客要介绍的几种复合数据类型:列表、元组、集合和字典。
一、列表
①概念
列表是python当中一种有序序列,里面可以存放任何类型的数据。
列表当中的元素数据是可以修改的,具有可变性。
②列表的创建
方式一:直接用中括号赋值的方式。
list1=[1,2,3,4,5] # 同种类型的数据
list2=[1,2.2,2.3,4.5] # 不同种类型的数据
list3=["1","hello ","python"] # 字符串类型的数据
list4=[["hello","wolrd"],"hello"] # 嵌套列表
list5=[] #空列表
list6=["hello"] #单元素列表
list7=["I","Love","python"]
a,b,c=list7 #列表拆包
print(a,b,c)
方式二:用list()函数生成。
#通过list()函数把元组转成列表
list1=list((1,2,3,4,5,6))
list2=list(("1","2","3","4","5"))
list3=list(("1",2,3.3,[1,2],(1,2,3,4),{1,2,3,4},{"name":"张三","age":21}))
#通过list()函数生成空列表
list4=list()
#通过list()函数把字符串转成列表
list5=list("hello world")
print(list1,list2,list3,list4)
print(list5)
方式三 列表推导式
#通过列表推导式生成列表对象
list1=[x for x in "hello world"]
#通过列表推导式生成一个新的列表对象
list2=[x**2 for x in [1,2,3,4,5,6,7,8]]
print(list1,list2)
以上就是常用的生成列表的方法,大家可以根据实际情况灵活选择使用。
③列表支持的函数
len()函数
此函数可以返回列表元素的个数,即列表大小。列表对象没有类似size的属性,需要通过此函数获得列表的大小。
#通过列表推导式生成列表对象
list1=[x for x in "hello world"]
#通过列表推导式生成一个新的列表对象
list2=[x**2 for x in [1,2,3,4,5,6,7,8]]
print(len(list1)) #输出 11
print(len(list2)) #输出 8
max()函数
此函数返回列表元素的最大值
min()函数
此函数返回列表元素的最小值
#通过列表推导式生成列表对象
list1=[x for x in "helloworld"]
#通过列表推导式生成一个新的列表对象
list2=[x**2 for x in [1,2,3,4,5,6,7,8]]
print(max(list1)) # 输出 w
print(min(list1)) # 输出d
print(max(list2)) #输出 64
print(min(list2)) # 输出1
这两个函数在使用时,必须要注意的一点是,列表中的数据必须是同一种类型的数据,并且数据类型支持比较运算符。
④列表上的操作。
一般我们对于数据库数据操作时,习惯上说可以进行增删改查的操作,此处也按照这个顺序进行讲解。
增加列表元素
append方法
通过此方法可以单个数据的方式在列表末尾追加新的列表数据元素,元素可以是任何数据类型的数据。
list1=[{"name":"张三"},{"name":"李四"}]
list1.append(1)
print(list1) #输出:[{'name': '张三'}, {'name': '李四'}, 1]
extend方法
通过此方法可以把另外一个列表中所有的元素添加到列表中,在列表后面进行添加。
list1=[{"name":"张三"},{"name":"李四"}]
list2=["hello",'world']
# list1.append(1)
list1.extend(list2)
print(list1)
输出结果:
[{'name': '张三'}, {'name': '李四'}, 1, 'hello', 'world']
注意list1添加之后的元素顺序。如果是 list2.extend(list1),结果又是如何呢?请自行验证结果。
insert()方法
此方法可以在列表的任何位置插入新的元素,接收两个参数,第一个参数代表插入位置,在该索引位置的前面进行插入,是一种“插队”模式,大家可以想象一下现实生活当中的插队场景,正常情况都是在某个人的前面进行插队才是合适合理的。此函数的原理也是一样。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
print(list1)
#输出结果
[{'name': '张三'}, '6', '5', {'name': '李四'}]
#注意 5 和 6 的位置。
删除列表元素
pop()方法。
此方法会移除列表当中的一个元素(默认是最后一个),并且会返回被移除的元素。
可以指定要删除元素的索引进行删除。
如果列表为空,或者索引超出范围的话,会抛出异常。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
print(list1)
o=list1.pop()
print(o,type(o))
print(list1)
o=list1.pop(1)
print(o,type(o))
#输出结果
'''
[{'name': '张三'}, '6', '5', {'name': '李四'}]
[{'name': '张三'}, '6', '5']
6 <class 'str'>
'''
remove()方法
此方法用于删除列表中第一个匹配的元素。
如果元素在列表中不存在,则会抛出异常。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
list1.remove("5")
print(list1)
list1.remove(5)
#输出结果
'''
[{'name': '张三'}, '6', {'name': '李四'}]
Traceback (most recent call last):
File "E:\python\2.0 办公自动化\chapter2\Demo1.py", line 6, in <module>
list1.remove(5)
ValueError: list.remove(x): x not in list
'''
del 语句
语法格式为:
del list1[索引]
注意:
如果后面直接是列表的变量名,而少了索引的话,会直接把整个列表变量删除掉。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
del list1[0]
print(list1)
#输出结果
'''
['6', '5', {'name': '李四'}]
'''
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
del list1
print(list1)
#输出结果
'''
Traceback (most recent call last):
File "E:\python\2.0 办公自动化\chapter2\Demo1.py", line 7, in <module>
print(list1)
NameError: name 'list1' is not defined
'''
clear方法。
此方法会清空删除列表当中的所有元素。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
list1.clear()
print(list1)
#输出结果
'''
[]
'''
修改列表元素
列表是可变的,列表中的元素是可以被修改的,可以通过对列表某个索引位置或切片位置重新赋值的方式进行修改列表元素。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
list1[0]="hello"
print(list1)
list1[0:3]=[2,3]
print(list1)
#输出结果
'''
['hello', '6', '5', {'name': '李四'}]
[2, 3, {'name': '李四'}]
'''
注意:利用切片索引时,赋值必须是迭代器类型的数据。
查询列表元素
查询列表中的元素是最常用的操作,列表是典型的序列类型的数据结构,里面的元素是按照一定的顺序存放的。是可以通过索引进行数据的获取。
通过索引获取单个数据元素
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
print(list1[0]) # 输出{"name":"张三"}
同时列表也支持通过切片的方式获取一个子列表数据。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
print(list1[0:2])#输出结果:[{'name': '张三'}, '6']
切片的使用方式和字符串切片的用法是一样的。也支持步长参数。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
list1.insert(1,"7")
list1.insert(1,"8")
list1.insert(1,"9")
print(list1)
print(list1[0:5:2])
#输出结果
'''
[{'name': '张三'}, '9', '8', '7', '6', '5', {'name': '李四'}]
[{'name': '张三'}, '8', '6']
'''
其他支持的操作
reverse()方法
此方法可以实现反转列表当中的元素。
list1=[{"name":"张三"},{"name":"李四"}]
list1.insert(1,"5")
list1.insert(1,"6")
list1.insert(1,"7")
list1.insert(1,"8")
list1.insert(1,"9")
print(list1)
list1.reverse()
print(list1)
#输出结果
'''
[{'name': '张三'}, '9', '8', '7', '6', '5', {'name': '李四'}]
[{'name': '李四'}, '5', '6', '7', '8', '9', {'name': '张三'}]
'''
sort()方法
此方法可以实现列表的排序操作。此 方法适用的列表要求列表中数据类型要一致,并且支持比较操作符。
list1=["4"]
list1.insert(1,"5")
list1.insert(1,"6")
list1.insert(1,"7")
list1.insert(1,"8")
list1.insert(1,"9")
print(list1)
list1.sort()
print(list1)
#输出结果
'''
['4', '9', '8', '7', '6', '5']
['4', '5', '6', '7', '8', '9']
'''
copy()方法。
此方法可以实现对一个列表进行复制,返回一个新的列表。
list1=["4"]
list1.insert(1,"5")
list1.insert(1,"6")
list1.insert(1,"7")
list1.insert(1,"8")
list1.insert(1,"9")
list1.insert(1,[1,2,3])
print(list1)
list2=list1.copy()
print(list2)
#输出结果
'''
['4', [1, 2, 3], '9', '8', '7', '6', '5']
['4', [1, 2, 3], '9', '8', '7', '6', '5']
'''
此处的复制是浅复制,如果源列表当中有元素是列表类型,如果对应的子列表发生改变,则复制后的列表的值也会发生变化。
# list1=[{"name":"张三"},{"name":"李四"}]
list1=["4"]
list1.insert(1,"5")
list1.insert(1,"6")
list1.insert(1,"7")
list1.insert(1,"8")
list1.insert(1,"9")
list1.insert(1,[1,2,3])
print(list1)
list2=list1.copy()
list1[1].append("3") #注意此处是修改子列表,而不是这种形式 list1[1]=[1,2,3,'3'],这是修改list1本身的元素,而不是修改子列表。
print('list1:',list1)
print('list2:',list2)
#输出结果
['4', [1, 2, 3], '9', '8', '7', '6', '5']
list1: ['4', [1, 2, 3, '3'], '9', '8', '7', '6', '5']
list2: ['4', [1, 2, 3, '3'], '9', '8', '7', '6', '5']
以上就是关于python当中典型的数据结构列表list相关的知识介绍,如果对您有帮助的话,欢迎关注作者。
---------------------------------------------------
您的支持和关注是作者继续创作下去的动力源泉。