目录
1、为什么需要列表
变量可以存储一个元素,而列表是一个“大容器"可以存储N多个元素,程序可以方便地对这些数据进行整体操作
列表相当于其它语言中的数组
列表示意图:
2、列表对象的创建
列表需要使用中括号[],元素之间使用英文的逗号进行分隔,例如下图:大圣和娟子姐就是元素,注意因为他们是str类型的所以要加上单引号
其内存示意图如下:
与下面这个图一起看,lst里面存的是紫色方块的地址(也可以说成是紫色方框的id)
列表的创建方式
使用中括号
调用内置函数list()
例子:
''创建列表对象的第一种方式,使用[]'''
lst=['hello','world',98]
'''创建列表的的第二种方式,使用内置函数list()'''
lst2=list(['hello','word',98])
内存示意图:
3、列表的特点
列表元素按顺序有序排序
索引映射唯一个数据
列表可以存储重复数据
任意数据类型混存
根据需要动态分配和回收内存
4、获取指定元素的索引
index():
如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
如果查询的元素在列表中不存在,则会抛出ValueError
还可以在指定的start和stop之间进行查找
例:
lst=['hello','worid',98,'hello']
print(lst.index('hello')) #如果列表种由相同元素值返回列表中相同元素的第一个索引
#print(lst.index('python')) #ValueError: 'python' is not in list,说明里面没有这个元素
#print(lst.index('hello',1,3)) #ValueError: 'python' is not in list ,1是指world,3值hello,但他不包括1和3本身,所以找不到
print(lst.index('hello',1,4))
执行结果:
5、获取列表中的单个元素 :
正向索引从O到N-1举例: Ist[0]
逆向索引从-N到-1举例: lst[-N]
指定索引不存,抛出lndexError
例子:
lst=['hello','world',98,'hello','world',234]
#获取索引为2的元素,该处是为正向索引,从1开始
print(lst[2])
#获取索引为-3的元素,负向索引,从-1开始
print(lst[-3])
#print(lst[10]) IndexError: list index out of range,超出了索引的范围,会抛出异常
6、获取列表中的多个元素
语法格式:
列表名[ start : stop : step ]
切片操作:
①切片的结果
原列表片段的拷贝
②切片的范围
[start,stop)
③step默认为1
简写为[start:stop]
⑥step为正数
[:stop:step]---》切片的第一个元素默认是列表的第一个元素---》从start开始往后计算切片
[start::step]---》切片的最后一个元素默认是列表的最后一个元素---》从start开始往后计算切片
⑦step为负数
[:stop:step]---》切片的第一个元素默认是列表的最后一个元素---》从start开始往前计算切片
[start::step]---》切片的最后一个元素默认是列表的第一个元素---》从start开始往前计算切片
例子:
lst=[10,20,30,40,50,60,70,80]
#start=1, stop=6,step=1
print(lst[1:6:1])
print('原列表',id(lst))
lst2=lst[1:6:1]
print('切的片段',id(lst2))
#原列表的id和切片列表的id不同,说明了切片是从原列表切片后,又新建了一个列表对象
print(lst[1:6]) #默认步长为1
print(lst[1:6:]) #默认步长还是为1
#start=1, stop=6,step=2,此时步长为2
print(lst[1:6:2])
#stop=6,step=2,start默认
print(lst[:6:2])
#start=1,step=2,stop默认
print(lst[1::2]) #通过结果我们可以发现stop默认是一直到结尾
print('==========step为复数===============')
print('原列表',lst)
print(lst[::-1])
#我们可以看出step为复数的第一个数是原列表的最后一个数,即将原列表倒了过来
#start=7,stop省略,step=-1
print(lst[7::-1])
#start=6,stop=0,step=-2
print(lst[6:0:-2])
输出结果:
7、列表元素的查询操作
判断指定元素在列表中是否存在:
元素 in 列表名
元素 not in 列表名
列表元素的遍历:
for 迭代变量 in列表名:
操作
例子:
print('p'in'python') #true
print('k'not in 'python') #true
lst=[10,20,'python','hello']
print(10 in lst) #true
print(100 in lst) #false
print(100 not in lst) #true
print(10 not in lst) #false
print('-------遍历-------------')
for item in lst:
print(item)
输出结果:
8、列表元素的增加操作
增加操作 | 方法/其它 | 操作描述 |
append() | 在列表的末尾添加一个元素 | |
extend() | 在列表的末尾至少添加一个元素 | |
insert() | 在列表的任意位置添加一个元素 | |
切片 | 在列表的任意位置添加至少一个元素 |
例子:
#向列表的末尾添加一个元素
lst=[10,20,30]
print('添加元素之前',lst,id(lst))
lst.append(100)
print('添加元素之后',lst,id(lst))
#通过对比添加元素前后的id可知,添加元素后他并没有创建新的对象
lst2=['hello','world']
#lst.ppend(lst2) #这个操作是将lst2作为以一个元素添加到列表的末尾
lst.extend(lst2)
#向列表的末尾一次性添加多个元素
print(lst)
#在任意位置上一添加一个元素
lst.insert(1,90) #意思是在索引为1的位置上添加90
print(lst)
#任意位置上添加N个元素
lst3=['true','false','hello']
lst[1:]=lst3
print(lst)
输出结果:
9、列表元素的删除操作
删除操作 | 方法/其它 | 操作描述 |
removeo | -次删除一个元素 | |
重复元素只删除第一个 | ||
元素不存在抛出ValueError | ||
pop() | 删除一个指定索引位置上的元素 | |
指定索引不存在抛出IndexError | ||
不指定索引,删除列表中最后一个元素 | ||
切片 | 一次致少删除一个元素 | |
clear() | 清空列表 | |
del | 删除列表 |
例子:
lst=[10,20,30,40,50,60,70,80,30]
lst.remove(30) #从列表中移除一个元素,如果又重复元素只移第一个
print(lst)
#pop()根据索引移除元素
lst.pop(1)
print(lst) #可以发现索引为1的位置上的元素被移除了
#lst.pop(6) 如果指定的索引位置不存在则抛出异常
lst.pop() #如果不指定参数,则将删除列表中的最后一个元素
print(lst)
print('------------切片操作-------------')
new_list=lst[1:3]
print('源列表',lst)
print('切片后的列表',new_list)
'''不产生新的列表对象,二十删除原列表中的内容'''
lst[1:3]=[] #其实不是真正的删除,而是用一个空列表将起替代
print(lst)
'''清除列表中的所有元素'''
lst.clear()
print(lst)
'''del语句将列表对象删除'''
del lst
#print(lst) 会报错,找不到列表
输出结果:
10、列表元素的修改操作
为指定索引的元素赋予一个新值
为指定的切片赋予一个新值
例子:
lst=[10,20,30,40]
#一次修改一个值
lst[2]=100
print(lst)
lst[1:3]=[300,400,500,600]
print(lst)
输出结果:
11、 列表元素的排序操作
常见的两种方式:
①调用sort()方法,列有中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True,进行降序排序
②调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变
例子:
st=[20,40,10,98,54]
print('排序前的列表',lst,id(lst))
#开始排序,调用列表对象的sort方法,升序排序
lst.sort() #不产生新的列表对象
print('排序后的列表',lst,id(lst))
#通过指定关键字参数,将列表中的元素进行排序
lst.sort(reverse=True) #reverse=True表示降序排序,reverse=False就是升序排序
print(lst)
lst.sort(reverse=False)
print(lst) #不产生新的列表对象
print('-------------使用内置函数sorted()对列表进行排序,将产生一个新的列表对象------------')
print('原列表',lst)
#开始排序
new_list=sorted(lst)
print(lst)
print(new_list)
#指定关键字参数,实现列表元素的降序排序
desc_list=sorted(lst,reverse=True)
print(desc_list)
输出结果:
12、列表生成式
列表生成式简称:
“生成列表的公式”
语法格式:
注意事项:“表示列表元素的表达式”中通常包含自定义变量
例子:
lst=[i for i in range(1,10)]
print(lst)
lst3=[i*i for i in range(1,10)]
'''列表中的元素的值为2,4,6,8'''
lst2=[i*2 for i in range(1,11)]
print(lst2)
输出结果:
print('apple'>'app') #True
print('apple'>'hanana') #False,相当于是97>98 False
print(ord('a'),ord('b'))
print(chr(97),chr(98))
print(chr(26472))
''' ==与is的与别
== 比较的是value
is 比较的是id是否相等
'''
a=b='Python'
c='Python'
print(a==b)
print(b==c)
print(a is b)
print(a is c)
print(id(a))
print(id(b))
print(id(c))