对于列表的学习,我整理了网上的一些资料,希望可以帮助到各位!!!
定义和使用列表
在Python中,列表是一系列元素按特定的顺序构成的数据序列,这就意味着定义一个列表类型的变量就可以保存多个数据,而且允许存在重复数据。
变量:使用变量存储数据,但是存在一个缺点:一个变量一次只能存储一个数据
若要存储多个数据:一般使用列表
列表本质上面是一个有序的集合。
在Python中,可以使用[ ]字面量语法来定义列表,列表中的多个元素用逗号进行分隔
语法:
变量名 = 列表
列表名称 = [数据1,数据2.....]
items1 = [36, 662, 97, 68, 59, 89]
items2 = ['Python', 'Java', 'Go']
列表中存储的数据为元素
列表中的元素从头到尾进行了编号。编号从0开始,这个编号被称为下标或者索引或者角标
索引的取值范围:0元素的个数-1
超过索引的范围:列表越界
除此以外,还可以通过Python内置的 list 函数将其他序列变成列表。它是创建列表对象的构造器。
items1 = list(range(1, 10))
print(items1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
items2 = list('hello')
print(items2) # ['h', 'e', 'l', 'l', 'o']
1.创建列表
list1 = [ ] 空列表
2.带元素的列表
list2=["五菱宏光","哈弗H6","大狗","欧拉",True]
3.列表中的元素可以是不同的数据类型
list3=[12,3.13,True,Fa1se,"he11o","米西米西"]
注意:将数据保存到列表的时候,不用考虑列表的大小,如果数据很大的话,底层会进行自动扩容
需要说明的是,列表是一种可变数据类型,也就是说列表可以添加元素、删除元素、更新元素
列表的运算符
列表支持拼接、重复、成员运算、索引和切片以及比较运算
items1 = [35, 12, 99, 68, 55, 87]
items2 = [45, 8, 29]
# 列表的拼接
items3 = items1 + items2
print(items3) # [35, 12, 99, 68, 55, 87, 45, 8, 29]
# 列表的重复
items4 = ['hello'] * 3
print(items4) # ['hello', 'hello', 'hello']
# 列表的成员运算
print(100 in items3) # False
print('hello' in items4) # True
# 获取列表的长度(元素个数)
size = len(items3)
print(size) # 9
# 列表的索引
print(items3[0], items3[-size]) # 35 35
items3[-1] = 100
print(items3[size - 1], items3[-1]) # 100 100
# 列表的切片
print(items3[:5]) # [35, 12, 99, 68, 55]
print(items3[4:]) # [55, 87, 45, 8, 100]
print(items3[-5:-7:-1]) # [55, 68]
print(items3[::-2]) # [100, 45, 55, 99, 35]
# 列表的比较运算
items5 = [1, 2, 3, 4]
items6 = list(range(1, 5))
# 两个列表比较相等性比的是对应索引位置上的元素是否相等
print(items5 == items6) # True
items7 = [3, 2, 1]
# 两个列表比较大小比的是对应索引位置上的元素的大小
print(items5 <= items7) # True
值得一提的是,由于列表是可变类型,所以通过索引操作既可以获取列表中的元素,也可以更新列表中的元素。对列表做索引操作一样要注意索引越界的问题,对于有N个元素的列表,正向索引的范围是0到N-1,负向索引的范围是-1到-N,如果超出这个范围,将引发IndexError异常,错误信息为:list index out of range。
列表元素的遍历
如果想逐个取出列表中的元素,可以使用for循环,有以下三种做法。
方法一:
items = ['Python', 'Java', 'Go', 'Kotlin']
for index in range(len(items)):
print(items[index])
方法二:
items = ['Python', 'Java', 'Go', 'Kotlin']
for item in items:
print(item)
方法三:
# 第三种方式:enumrate()同时遍历索引和元素
for index,value in enumerate(list3):
print(index,value)
列表的方法
#1.添加元素
#a.append() 向列表的尾部追加元素
list1=["香妃","妲己","赵飞燕","杨贵妃","东施"]
print(list1)
#追加单个元素
list1.append("西施")
#追加多个元素的时候,不能直接追加,必须使用列表的方式追加,原列表变成了二维列表list1.append(["王昭君","貂蝉","大小乔"])
print(list1)
#b.extend用于在列表末尾一次追加另一个列表中的多个元素
list1=["香妃","妲己","赵飞燕","杨贵妃","东施"]
list1.extend(["乾隆","商纣王","汉昭帝","唐玄宗","解博超"])
list1.extend("秦始皇") #"秦""始""皇"
print(list1)
#c.insert()在列表中指定的索引处插入元素,后面的其他的元素依次后延
list2=["秦始皇","汉武帝","曹操","刘备","孙权"]
list2.insert(1,"刘邦")
#若想一次性插入多个元素使用列表的形式插入原列表会变为二维列表
list2.insert(3,["诸葛亮","马超"])
print(list2)
#2.删除元素
list2=["秦始皇","汉武帝","曹操","刘备","孙权"]
#pop()传输的参数是下标,不传参数的时候,默认移除最后一个元素,返回的是原列表
print(list2)
list2.pop()["秦始皇","汉武帝","曹操","刘备"]
list2.pop(2) #['秦始皇','汉武帝','刘备','孙权']
print(list2)
#remove()传输的参数是指定移除的元素
list2.remove("刘备")
print(list2)
#clear()清空列表
print(list2)
list2.clear()
print(list2) #[]
3.获取元素
list=[12,34,2,5.23,True,False,"hello"]
print(len(list)) #len获取列表的长度
#获取列表中的最大值max()
list1=[12,3,4,32,98,14,3,78,3,34,3]
print(max(list1))
#获取列表中的最小值min()
list1=[12,3,4,32,98,14,3,78,3,34,3]
print(min(list1))
#获取指定元素的索引 index(元素名称)
print(list1.index(98))
# 查找元素的索引位置
items = ['Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python']
print(items.index('Python')) # 0
print(items.index('Python', 2)) # 5
# 注意:虽然列表中有'Java',但是从索引为3这个位置开始后面是没有'Java'的
print(items.index('Java', 3)) # ValueError: 'Java' is not in list
# 查找元素出现的次数
items = ['Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python']
# 查找元素出现的次数
print(items.count('Python')) # 2
print(items.count('Go')) # 1
print(items.count('Swfit')) # 0
4.其他用法
#列表的其他用法
list=[12,42,34,16,87]
print(list)
#reverse翻转列表元素 注意:在原列表的内部进行翻转,不会生成新列表#list.reverse()
print(list)
#sort()对原列表元素进行排序,默认是升序 不会生成一个新的列表
#升序
list.sort()
#降序 在sort函数中传入reverse=True实现降序#list.sort(reverse=True)
print(list)
#sorted()对列表元素进行排序,默认是升序,排序的结果会生成一个新列表
#升序
list1=sorted(list)
#降序传入reverse=True
list1=sorted(list,reverse=True)
print(list1)
list2=["a","hello","abe","bc","everyone"]#按照元素的长度进行排序
list3=sorted(list2,key=len)
print(list3)
需要提醒大家,
在使用remove方法删除元素时,如果要删除的元素并不在列表中,会引发ValueError异常,错误消息是:list.remove(x): x not in list。
在使用pop方法删除元素时,如果索引的值超出了范围,会引发IndexError异常,错误消息是:pop index out of range。
从列表中删除元素其实还有一种方式,就是使用Python中的del关键字后面跟要删除的元素,这种做法跟使用pop方法指定索引删除元素没有实质性的区别,但后者会返回删除的元素,前者在性能上略优(del对应字节码指令是DELETE_SUBSCR,而pop对应的字节码指令是CALL_METHOD和POP_TOP)。
items = ['Python', 'Java', 'Go', 'Kotlin']
del items[1]
print(items) # ['Python', 'Go', 'Kotlin']
二维列表
一个列表的元素是一个列表
list=[12,34,6,7,"boy",True] #一维列表
list1=[32,14,"girl",False,[16,31,9.12,"haha"]] #二维列表print(list1[1]) #14
print(list1[4][2]) #9.12
列表生成式
list comprehension系统内置的用于创建 list 的方式range(start,end,step) 缺点 : 生成的列表一般情况下都是等差数列
#最基本的列表
#1.生成1-10之间所有的数字
list1=list(range(1,11))
print(list1)
#需求:生成列表[1,4,9,16,25]
#第一种方法:使用for循环为空列表添加元素
for i in range(1,6):
list2.append(i**2)
print(list2)
#第二种方法:使用列表生成式
list3=[i**2 for i in range(1,6)]
print(list3) #[1,4,9,16,25]
#使用列表生成式生成1-10之间所有的奇数
list4=[i for i in range(1,11) if i%2==1]
print(list4)
#使用列表生成式生成1-10之间所有的奇数并且能被3整除的数字
list5=[i for i in range(1,11) if i%2==1 and i%3==0]
print(list5)
#列表生成式中使用双重循环
list6=[i+j for i in "xyz" for j in "987"]
print(list6)
#字典生成式:
dict1={i:i*i for i in range(1,6)}
print(dict1)
#集合生成式:
set1={i*i for i in range(1,6)}
print(set1)
嵌套的列表
Python语言没有限定列表中的元素必须是相同的数据类型,也就是说一个列表中的元素可以任意的数据类型,当然也包括列表。如果列表中的元素又是列表,那么我们可以称之为嵌套的列表。嵌套的列表可以用来表示表格或数学上的矩阵,例如:我们想保存5个学生3门课程的成绩,可以定义一个保存5个元素的列表保存5个学生的信息,而每个列表元素又是3个元素构成的列表,分别代表3门课程的成绩。但是,一定要注意下面的代码是有问题的。
scores = [[0] * 3] * 5
print(scores) # [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
看上去我们好像创建了一个5 * 3的嵌套列表,但实际上当我们录入第一个学生的第一门成绩后,你就会发现问题来了,我们看看下面代码的输出。
# 嵌套的列表需要多次索引操作才能获取元素
scores[0][0] = 95
print(scores)
# [[95, 0, 0], [95, 0, 0], [95, 0, 0], [95, 0, 0], [95, 0, 0]]
正确做法:
scores = [[0] * 3 for _ in range(5)]
scores[0][0] = 95
print(scores)
# [[95, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
总结
Python中的列表底层是一个可以动态扩容的数组,列表元素在内存中也是连续存储的,所以可以实现随机访问(通过一个有效的索引获取到对应的元素且操作时间与列表元素个数无关)。
通过本章节我们需要知道:
列表是容器,可以保存各种类型的数据,可以通过索引操作列表元素。
恭喜你学会了列表,快去试试吧!!!