目录
为什么需要列表
列表特点
列表示意图
创建列表
使用中括号创建
使用内置函数创建
内存示意图
删除列表
查询操作
获取单个元素
获取指定元素索引
全列表查找
指定位置查找
获取列表多个元素
切片的范围
Step设定
Step为正数
Step为负数
判断元素是否存在
列表元素的遍历
增加元素
Append
Extend
Insert
切片
修改元素
修改索引
切片
排序
列表sort方法
内置函数sorted
删除元素
Remove
Pop
clear
列表生成式
总结
为什么需要列表
1.变量可以存储一个元素,而列表是一个‘大容器’可以存储N多个元素,
程序可以方便的对这些数据进行整体操作;
2.列表相当于其他语言中的数组。
列表特点
列表元素按顺序有序排序
索引映射唯一个数据
列表可以存储重复数据
任意数据类型混存
根据需要动态分配和回收内存
列表示意图
创建列表
列表需要使用中括号[],元素之间使用英文的逗号进行分隔。
使用中括号创建
使用中括号创建列表,数据内容有字符串、数字、元组类型,其中还有重复的数据。
示例如下:
list1 = ['zhangsan', '张三', 1, 1, ('lisi', 2)]
print(list1)
print(type(list1))
# 执行结果
# ['zhangsan', '张三', 1, 1, ('lisi', 2)]
# <class 'list'>
使用内置函数创建
使用内置函数list()把元组数据转化为list。
示例如下:
list2 = list((1, 'zhangsan', 'lisi'))
print(list2)
print(type(list2))
# 执行结果
# [1, 'zhangsan', 'lisi']
# <class 'list'>
内存示意图
列表中存储的并不是数据,而是数据的引用。
删除列表
删除列表操作使用del方法,删除后不可再访问该列表。
示例如下:
list3 = [1, 2, 3, 4]
print(list3)
del list3
print(list3)
执行结果
[1, 2, 3, 4]
Traceback (most recent call last):
File "E:\lianxipy\day3\列表.py", line 25, in <module>
print(list3)
NameError: name 'list3' is not defined
查询操作
获取单个元素
可以通过指定索引(正向或逆向),获取相对应的元素。
注意:如果指定索引不存在元素,则抛出indexError异常类型。
示例如下:
list4 = [1, '张三', 'lisi', 'lisi']
print(list4[0])
print(list4[-1])
print(list4[-4])
# 执行结果
# 1
# lisi
# 1
可以看到通过指定索引0和-4获取的都是第一个列表值。
获取指定元素索引
使用列表的index函数,可以查找指定元素位于列表中的索引值,
只返回第一个符合的索引值;
但是如果不存在,则会抛出ValueError异常。
全列表查找
示例如下:
list4 = [1, '张三', 'lisi', 'lisi']
print(list4.index('lisi'))
# 执行结果
# 2
指定位置查找
指定位置查找是指,在使用index函数时指定起始和终止查找范围。
示例如下:
list4 = [1, '张三', 'lisi', 'lisi', 'lisi']
print(list4.index('lisi', 3, 4))
# 执行结果
# 3
从索引3(包含3)开始查找 查找到索引4(不包含4)。
获取列表多个元素
是一种通过切片形式来获取多个元素,具体格式为:列表名[start:stop:step]
返回结果为原列表相应片段的拷贝。
切片的范围
start 起始位置,可以与stop组合使用也可以单独使用
stop 终结位置,可以与start组合使用也可以单独使用
示例如下:
list4 = [1, '张三', 'lisi', 'lisi', 'lisi']
# 单独使用stop 表示从start(包含start位置)到最后
list4_1 = list4[1:]
print(list4_1) # ['张三', 'lisi', 'lisi', 'lisi']
# 单独使用stop 表示从开始到stop (不包含stop位置) 为止
list4_2 = list4[:3]
print(list4_2) # [1, '张三', 'lisi']
# 组合使用 表示从start(包含start位置)到stop (不包含stop位置) 为止
list4_3 = list4[1:3]
print(list4_3) # ['张三', 'lisi']
Step设定
step默认为1,也就是不设置的情况下是1。
Step为正数
切片的第一个元素默认是列表的第一个元素。
示例如下:
list4 = [1, '张三', 'lisi', 'lisi', 'lisi']
# step为正数
print(list4[:3:2]) # 从0开始取到3为止,步长为2,结果为:[1, 'lisi']
print(list4[1:3:2]) # 从1开始取到3为止,步长为2,结果为:['张三']
print(list4[1::2]) # 从1开始取到最后,步长为2,结果为:['张三', 'lisi']
Step为负数
切片的第一个元素默认是列表的最后一个元素。
示例如下:
list4 = [1, '张三', 'lisi1', 'lisi2', 'lisi3']
print(list4[:-3:-1])
# 从列表最后一个元素开始到-3(倒数第三个)为止,步长为1,结果为:['lisi3', 'lisi2']
print(list4[-1:-4:-1])
# 从列表最后一个元素开始到-4(倒数第四个)为止,步长为1,结果为:['lisi3', 'lisi2', 'lisi1']
print(list4[-2::-1])
# 从列表倒数第二个元素开始到第一个元素为止,步长为1,结果为:['lisi2', 'lisi1', '张三', 1]
判断元素是否存在
使用in 与 not in 来判断指定元素在列表中是否存在,返回布尔值。
示例如下:
list5 = [1, 2, 3, 'zhang', 'san', 'li']
print(1 in list5)
print('zhang' not in list5)
# 执行结果
# True
# False
列表元素的遍历
遍历在列表的使用中经常出现,
格式:
for 迭代变量 in 列表名:
具体操作
下面是如何遍历。
示例如下:
for i in list5:
print(i)
# 执行结果
# 1
# 2
# 3
# zhang
# san
# li
增加元素
Append
在列表的末尾添加一个元素
示例如下:
list6 = [1]
# append
list6.append('end')
print(list6)
# 执行结果
# [1, 'end']
Extend
在列表的末尾至少添加一个元素。可使用字典、列表、元组、字符串等格式作为参数添加,
当以字符串参数添加时,会以单个字母形式添加入列表(认为是多个)
示例如下:
list6 = [1]
list6.extend({'end1'})
list6.extend(['end2'])
list6.extend(('end3',))
list6.extend('end4')
print(list6)
# 执行结果
# [1, 'end1', 'end2', 'end3', 'e', 'n', 'd', '4']
Insert
在列表的任意位置添加一个元素
示例如下:
list6 = [1]
list6.insert(0, 'zhangsan')
print(list6)
list6.insert(4, 'lisi')
print(list6)
# 执行结果
# ['zhangsan', 1]
# ['zhangsan', 1, 'lisi']
切片
在列表的任意位置添加至少一个元素。可以说是添加,也算是修改。
示例如下:
print('原列表:', list6)
list6[:1] = [1, 2, 3]
print(list6)
# 执行结果
# 原列表: [1]
# [1, 2, 3]
修改元素
修改索引
为指定索引的元素赋予一个新值。
示例如下:
list7 = [1, 2, 3]
print('原列表:', list7, id(list7))
list7[0] = 100
print(list7, id(list7))
# 执行结果
# 原列表: [1, 2, 3] 2666522038856
# [100, 2, 3] 2666522038856
可以看出在修改后列表id并未发生改变,还是原来的列表,只是值发生了改变。
切片
为指定的切片赋予一个新值。
示例如下:
list7 = [1, 2, 3]
print('原列表:', list7, id(list7))
list7[2:3] = [100, 110]
print(list7, id(list7))
# 执行结果
# 原列表: [1, 2, 3] 2110356345416
# [1, 2, 100, 110] 2110356345416
通过切片修改,把原来的第三个元素修改为100并添加了110。
排序
常见的两种方式来实现排序。
需要注意:排序的列表中不能是混合类型的即数字和字符串混合,必须是同样类型的,否则无法比较会抛出TypeError.
列表sort方法
调用sort()方法,列表中的所有元素默认按照从大到小的顺序进行排序,可以指定reverse=True,进行降序排序。
示例如下:
list8 = [3, 4, 1, 4, 2, 0]
list9 = ['b', 'a', 'f', 'e']
# sort方法
print('原列表:', list8, id(list8))
list8.sort()
print(list8, id(list8))
# 降序
list8.sort(reverse=True)
print(list8, id(list8))
print('原列表:', list9, id(list9))
list9.sort()
print(list9, id(list9))
# 降序
list9.sort(reverse=True)
print(list9, id(list9))
执行结果:
原列表: [3, 4, 1, 4, 2, 0] 2399479616072
[0, 1, 2, 3, 4, 4] 2399479616072
[4, 4, 3, 2, 1, 0] 2399479616072
原列表: ['b', 'a', 'f', 'e'] 2399479616584
['a', 'b', 'e', 'f'] 2399479616584
['f', 'e', 'b', 'a'] 2399479616584
使用列表的sort函数是对原列表进行正序和倒序排序,直接修改了原列表。
内置函数sorted
调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变。
示例如下:
list8 = [3, 4, 1, 4, 2, 0]
# 内置函数sorted
print('原列表:', list8, id(list8))
list8_1 = sorted(list8)
print(list8_1, id(list8_1))
# 降序
list8_2 = sorted(list8, reverse=True)
print(list8_2, id(list8_2))
print('原列表:', list8)
执行结果:
原列表: [3, 4, 1, 4, 2, 0] 2839586820680
[0, 1, 2, 3, 4, 4] 2839586821192
[4, 4, 3, 2, 1, 0] 2839587379080
原列表: [3, 4, 1, 4, 2, 0]
可以看出使用内置函数sorted是对原列表排序后,创建了新的列表,
原列表并没有发生改变。
删除元素
Remove
删除列表中的某个元素,当元素不存在时,会抛出ValueError异常
示例如下:
list10 = [1, 2, 3, 4, 5]
print('原列表:', list10)
# 删除列表中的元素
list10.remove(2)
print(list10)
# 执行结果
# 原列表: [1, 2, 3, 4, 5]
# [1, 3, 4, 5]
Pop
抛出最后一个元素 并返回被删除的元素。
示例如下:
list10 = [1, 2, 3, 4, 5]
print('原列表:', list10)
print(list10.pop())
print(list10.pop())
print(list10)
# 执行结果
# 5
# 4
# [1, 2, 3]
clear
清空列表内容。
示例如下:
list10.clear()
print(list10)
# 执行结果
# 原列表: [1, 2, 3, 4, 5]
# []
列表生成式
列表生成式是“生成列表的公式”的简称。
语法格式:[元素表达式 for 自定义变量 in 可迭代对象]
示例如下:
list11 = [x for x in range(1, 10)]
print(list11)
list12 = [x*2 for x in range(1, 10)]
print(list12)
# 执行结果
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# [2, 4, 6, 8, 10, 12, 14, 16, 18]
注意:表示列表元素的表达式中需要包含自定义变量
总结
对python 列表数据类型内容进行了整理,包含使用列表原因、特点,创建列表和增删改查及排序操作。