1、什么是列表(list)
列表:
- 列表是python提供的一种容器型数据类型;以中括号作为容器的标志,里面的多个元素用逗号隔开:[元素1,元素2,元素3,元素4,....]。
- 特点:
列表是可变的(元素个数、值可变)支持增、删、改、查的操作
列表是有序的支持下标操作
列表元素:
- 列表中的元素可以是任何类型的数据;同一个列表中的元素的类型可以不一样。
list1 = ['张三',21.3, True, [1,4], {'name':'李白'}]
print(list1)
2、列表的基本操作(查增删改)
2.1、查
- 获取列表中的元素
2.1.1、获取单个元素
语法:
表示方式:列表[下标] -> 获取列表中指定下标对应的元素
说明:
列表 --> 列表值,保存列表的变量,结果是列表的表达式。
[] --> 固定写法
下标 --> 元素在列表中的位置
下标范围:
0到列表长度-1 --> 从前往后依次增加(0表示第一个元素)
-1到列表范围 --> 从后往前依次递减(-1表示最后一个元素)
list1 = ['张三',21.3, True, [1,4], {'name':'李白'}]
print(list1[4]) # 获取最后一个元素
print(list1[-1]) # 获取最后一个元素
2.1.2、获取部分元素(切片)
- 列表切片的结果任然是列表
语法:
表示方式:列表[开始下标:结束下标:步长] --> 列表[M,N,step] ==>> 列表取前不取后
注意:
a、步长为正(+),从前往后取:开始下标的位置必须在结束下标的前面,否则会是个空列表[]
b、步长为负(-),从后往前取:开始下标的位置必须在结束下标的后面,否则会是个空列表[]
list1 = ['张三',21.3, True, [1,4], {'name':'李白'}, 21]
print(list1[1:4:2]) # 以步长为2获取1到4(不包含4)对应的元素 --> [{'name': '李白'}, [1, 4], True]
print(list1[4:1:-1]) # 以步长为2获取1到4(不包含4)对应的元素 --> list1 = ['张三',21.3, True, [1,4], {'name':'李白'}, 21]
2.1.3、获取部分元素(切片)之省略下标和步长
- a、省略步长:列表[开始下标:结束下标] --> 相当于步长为1
- b、列表[:结束下标:步长] --> 步长为正,从第一个元素开始取;步长为负,从最后一个往前取
- c、列表[开始下标::步长] --> 从该下标取到最后一个元素
- d、列表[::步长] --> 步长为正,以步长为多少顺序输出,步长为负,以-步长为多少逆序输出
list1 = ['张三',21.3, True, [1,4], {'name':'李白'}, 21]
print(list1[:3:-1]) # 从后往前取 --> [21, {'name': '李白'}]
print(list1[3::-1]) # 从后往前取 --> [[1, 4], True, 21.3, '张三']
print(list1[::-1]) # 倒序输出 --> [21, {'name': '李白'}, [1, 4], True, 21.3]
print(list1[::2]) # 顺序以步长为2输出 --> ['张三', True, {'name': '李白'}]
print(list1[:]) #顺序输出 ['张三',21.3, True, [1,4], {'name':'李白'}, 21]
2.1.4、遍历
使用方式:for name in names
- 将列表中的元素一个一个的取出来
- 注意:下标切记不能越界
越界报错 # IndexError: list index out of range 索引下标越界
但是切片的时候允许越界
# 直接遍历获取元素:
movies = ['暮光之城','哪吒之魔童降世','速度与激情','肖生克的救赎','摔跤吧爸爸','斗罗大陆']
for movie in movies:
print(movie)
# 通过遍历下标来遍历:
length = len(列表)
movies = ['暮光之城','哪吒之魔童降世','速度与激情','肖生克的救赎','摔跤吧爸爸','斗罗大陆']
length = len(movies)
# for index in range(-1, -length-1, -1): # 逆序输出
for index in range(length):
print(movies[index])
2.2、增
- append:列表.append(元素) - 追加:在指定的列表末尾添加指定的元素
- insert:列表.insert(下标,元素) 在指定的列表添加指定的元素到指定的位置前面
films = ['盗梦空间','一人之下','一拳超人','不良人','死亡笔记']
print(films)
films.append('斗罗大陆')
print(films)
films.insert(2, '秦时明月')
print(films)
2.3、删
- del:del 列表[下标] -- 删除指定下标对应的元素(下标不可越界)
- remove:列表.remove(元素) -- 删除指定的元素
如果有多个元素只会删除第一个遇到的元素
如果元素不存在会报错 - pop:
列表.pop() -- 默认取出列表中最后一个元素
列表.pop(下标) -- 取出列表中指定下标对应的元素
films = ['盗梦空间','一人之下','一拳超人','不良人','死亡笔记']
print(films)
del films[2]
print(films)
films.remove('一人之下')
print(films)
a = films.pop()
b = films.pop(0)
print(a, b, films)
# 练习:删除下面这个列表中所有小于60的元素(一个小坑)
scores = [89, 45, 56, 20, 90, 78, 60, 23, 87, 20, 50]
'''
temp = scores[:] 等价于 scores[:] 复制粘贴一份
'''
for num in scores[:]:
if num < 60:
scores.remove(num)
print(scores)
2.4、改
- 列表[下标] = 值 --> 将列表中指定下标对应元素修改成指定的值
num = [10, 2, 54, 56]
num[1] = 20
print(num)
# 练习:将scores中所有小于60的值的分数换成不及格
scores = [89, 45, 56, 20, 90, 78, 60, 23, 87, 20, 50]
for index in range(len(scores)):
if scores[index] < 60:
scores[index] = '不及格'
print(scores)
3、列表相关操作
3.1、运算符
3.1.1、运算符
a、数学运算: +, *
- 列表1 + 列表2 --> 产生一个新的列表,新列表中的元素是两个列表元素的合并
list1 = [1, 2, 3]
list2 = ['张三', '李四']
print(list1 + list2) # [1, 2, 3, '张三', '李四']
- 列表 * N --> N个列表相加(合并),产生一个新的列表
list1 = [1, 2, 3]
print(list1 * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
b、比较运算符:
==,!= 判断列表对应位置的值
list1 = ['a', 'b', 'c', ]
list2 = ['a', 'b', 'c', ]
list3 = ['a', 'c', 'b', ]
print(list1 == list2) # True
print(list1 == list3) # False
c、is
变量1 is 变量2 --> 判断地址是否相等
li1 = [1, 2]
li2 = [1, 2]
print(li1 == li2) # True
print(li1 is li2) # False print(id(li1) is id(li2))
d、列表比较大小(>,<,>=,<=)
- 依次对应位置的数据比较大小
print([1, 2, 3] > [2, 1]) # False
3.1.2、in和not in
- 元素 in 列表 # 判断列表中是否存在指定元素
- 元素 not in 列表 # 判断列表中是否不存在指定元素
names = ['张三', '李四', '王二', '燕双鹰']
print('张三' in names) # True
print('张三' not in names) # False
3.1.3、列表的相关函数(len、max、min、list、sum)
len 获取序列的长度(元素的个数)
用法:len(序列)
print(len([1, 2, 3])) # 3
max/min 获取序列中元素的最大值/最小值
max(序列)/min(序列)
a、序列中所有的元素的类型一致(数字看成是一种类型)
b、元素本身支持比较大小
scores = [23, 78, 54, 34, 98, 12, 54]
print(max(scores)) # 98
print(min(scores)) # 12
sum 求序列中所有元素的和
sum(数字序列)
scores = [23, 78, 54, 34, 98, 12, 54]
print(sum(scores)) # 353
list 将指定的数据转换为列表;数据必须是序列(所有的序列都可转为列表)
print(list((1,2,3,4,'a',['c'],'张三'))) # [1, 2, 3, 4, 'a', ['c'], '张三']
print(list(range(6, 10))) # [6, 7, 8, 9]
4、列表相关方法
QQ图片20191111152324.pngcount,extend,index,reverse,clear,copy,sort,sorted,reversed
count 将指定的数据转换为列表;数据必须是序列
列表.count(元素)
names = ['墨子','狄仁杰','小乔','猴子','凯']
print(names.count('凯')) # 1
extend 将列表中的元素全部添加到列表中
列表.extend(序列)
names = ['墨子','狄仁杰','小乔','猴子','凯']
names.append('老夫子')
print(names)
names.extend('鲁班')
print(names)
names.extend(['赵云','刘备'])
print(names)
index 获取指定元素在列表中的下标
列表.index(元素)
a、如果元素不存在会报错
b、如果元素有多个,获取第一个
nums = [1, 3, 4, 2, 3, 6, 10]
print(nums.index(3)) # 1
print(nums.index(6)) # 5
reverse 将原来的列表倒序(反过来)
列表.reverse()
nums = [1, 4, 5, 2]
nums.reverse() # 在原来列表上改
print(nums) # [2, 5, 4, 1]
nums = [1, 4, 5, 2]
new_nums = nums[::-1] # 产生一个新的列表
print(nums, new_nums) # [1, 4, 5, 2] [2, 5, 4, 1]
clear 清空列表(清空列表一般使用clear,而不是直接赋值[])
列表.clear()
nums = [1, 4, 5, 2]
nums.clear() # 容器还在
print(nums)
nums = [1, 4, 5, 2]
nums = [] # 创造新的容器
print(nums)
copy 复制列表中的元素,产生一个新的列表,将新列表的地址返回。赋值后,两个互不影响;和列表[:]的功能一模一样,都属于浅拷贝
列表.copy()
nums = [1, 4, 5, 2]
new_nums = nums.copy()
new_nums.remove(1)
print(id(nums), id(new_nums)) # 44058024 44418152
print(nums) # [1, 4, 5, 2]
print(new_nums) # [4, 5, 2]
sort
列表.sort()将列表中的元素从小到大排序(直接修改列表元素的数据,不会产生新的列表)
列表.sort(reverse=True)将列表中的元素从大到小排序(直接修改列表元素的数据,不会产生新的列表)
nums = [1, 2,1,4,2,1,7,3,3]
nums.sort()
print(nums) # [1, 1, 1, 2, 2, 3, 3, 4, 7]
nums.sort(reverse=True)
print(nums) # [7, 4, 3, 3, 2, 2, 1, 1, 1]
sorted
排序函数: sorted(序列)不修改原序列,排序后产生新的列表(升序)
sorted(序列, reverse=True)不修改原序列,排序后产生新的列表(降序)
nums = [1, 2,1,4,2,1,7,3,3]
new_nums = sorted(nums)
print(new_nums) # [1, 1, 1, 2, 2, 3, 3, 4, 7]
str1 = 'hello'
new_str1 = sorted(str1)
print(new_str1) # ['e', 'h', 'l', 'l', 'o']
sorted 将序列中的元素倒序,产生一个新的序列对应的迭代器
reversed(序列)
nums = [1, 4, 5]
nums.reverse()
print(nums)
网友评论