目录
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默认为1,也就是不设置的情况下是1。
切片的第一个元素默认是列表的第一个元素。
示例如下:
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']
切片的第一个元素默认是列表的最后一个元素。
示例如下:
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
在列表的末尾添加一个元素
示例如下:
list6 = [1]
# append
list6.append('end')
print(list6)
# 执行结果
# [1, 'end']
在列表的末尾至少添加一个元素。可使用字典、列表、元组、字符串等格式作为参数添加,
当以字符串参数添加时,会以单个字母形式添加入列表(认为是多个)
示例如下:
list6 = [1]
list6.extend({'end1'})
list6.extend(['end2'])
list6.extend(('end3',))
list6.extend('end4')
print(list6)
# 执行结果
# [1, 'end1', 'end2', 'end3', 'e', 'n', 'd', '4']
在列表的任意位置添加一个元素
示例如下:
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()方法,列表中的所有元素默认按照从大到小的顺序进行排序,可以指定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(),可以指定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是对原列表排序后,创建了新的列表,
原列表并没有发生改变。
删除列表中的某个元素,当元素不存在时,会抛出ValueError异常
示例如下:
list10 = [1, 2, 3, 4, 5]
print('原列表:', list10)
# 删除列表中的元素
list10.remove(2)
print(list10)
# 执行结果
# 原列表: [1, 2, 3, 4, 5]
# [1, 3, 4, 5]
抛出最后一个元素 并返回被删除的元素。
示例如下:
list10 = [1, 2, 3, 4, 5]
print('原列表:', list10)
print(list10.pop())
print(list10.pop())
print(list10)
# 执行结果
# 5
# 4
# [1, 2, 3]
清空列表内容。
示例如下:
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 列表数据类型内容进行了整理,包含使用列表原因、特点,创建列表和增删改查及排序操作。