python基础语法day4
一、列表
- 列表,容器符号是[],数据类型是list
- 列表是有序的数据类型(每个元素有自己固定的位置,叫做“下标”)
- 列表是可变的(对列表中元素进行增删改操作)
- 列表中可以保存任意类型的数据
- 列表中允许出现重复的元素
- 列表的运算
list1 = [] # 空列表
list2 = list() # 通过构造器语法创建空列表;
print(list1, list2, list1 == list2)
list3 = [1, 1.1, True, 'abcc', [abc], None, (1,2,3), {'name':20}, {1,2,3}]
print(list3)
- 列表的拼接(生成一个新的列表)
print(list3 + list3)
- 列表的重复(生成一个新的列表)
print(list3 * 5)
- 成员运算 in、not in
print('abcd' in list3) # True
print('bcda' not in list3) # False
print(1 in list3) # True
print([1] in list3) # False
- 比较运算:列表之间可以比较大小
容器型数据类型比较大小,比较的是相同位置的第一队相同数据类型不同子元素的大小
list4 = [1, 2, 3, 4]
list5 = [1, 2, 4, 5]
print(list4 > list5) # list4 < list5 --True
list6 = [1, 2, 3, 4]
list7 = [1, 2, 4, 3]
print(list6 == list7) # list6 < list7 --True
二、列表的下标和切片
- 列表中每个元素都有自己的位置(下标)
- 分为正向下标和负向下标
- 正向下标:从左向右,从0开始
- 负向下标:从右向左,从-1开始
- 通过下标获取元素:有序容器[下标数字]
list1 = ['英雄联盟', 'CS:GO', '超级马里奥', '原神', '魂斗罗', '王者荣耀', 'PUBG']
print(list1[2] == list1[-5])
print(list1[2])
print(list1)
- 切片:获取有序容器中某一部分元素,得到的结果是和原容器相同类型的容器
- 有序容器[M:N:step] --左开右闭[M,N)
- 切片中正下标和负下标可以混用
- 开始不写,结束写表示从头取到指定下标;反之从指定下标到末尾
print(list1[0:7])
print(list1[0:7:3])
print(list[1:-2:3]) # ['CS:GO','魂斗罗']
print(list[-1:-8:-1]) # ['PUBG','王者荣耀', '魂斗罗', '原神', '超级马里奥', 'CS:GO', '英雄联盟']
print(list[:]) # ['英雄联盟', 'CS:GO', '超级马里奥', '原神', '魂斗罗', '王者荣耀', 'PUBG']
print(list[::-1]) # ['PUBG','王者荣耀', '魂斗罗', '原神', '超级马里奥', 'CS:GO', '英雄联盟']
print(list1[::-3]) # ['英雄联盟', '原神', 'PUBG']
注意:
- 通过下标获取元素,下标不能越界
print(list1[100]- 在切片中允许下标越界
print(list1[1:100000])
练习题:
list1 = [‘英雄联盟’, ‘CS:GO’, ‘超级马里奥’, ‘原神’, ‘魂斗罗’, ‘王者荣耀’, ‘PUBG’]
- 获取英雄联盟、PUBG
- 获取’原神’
- 获取[‘王者荣耀’,‘原神’,‘CS:GO’]
- 获取[‘魂斗罗’, ‘原神’, ‘超级马里奥’]
# 获取英雄联盟、PUBG
print(list1[0:7:6])
print(list1[-7:7:6])
print(list1[::6])
print(list1[-7::6])
# 获取'原神'
print(list1[3]) print(list1[-4])
# 获取['王者荣耀','原神','CS:GO']
print(list1[-2:7:-2])
# 获取['魂斗罗', '原神', '超级马里奥']
print(list1[-3:1:-1])
print(list1[-3:-6:-1])
三、列表的循环遍历
- 直接遍历
list1 = ['A', 'B', 'C', 'D']
for i in list1:
print(i)
- 间接遍历
list1 = ['A', 'B', 'C', 'D']
# len():获取有序容器的长度
print(len(list1))
for index in range(len(list1)):
print(f'{index} --> {list1[index]}')
- enumerate():能够将列表中的每个元素及其下标放到一个元组中,多个元组组成一个可迭代对象(能够做遍历)
print(enumerate(list1))
for content in enumerate(list1):
print(content)
三、列表的增删改
list1 = ['Java', 'Python', 'C']
- 增
append:追加,向列表的末尾添加元素
list1.append('HTML')
print(list1)
insert:插入,向列表的任意位置添加元素
list1.insert(0, 'C++')
print(list1)
extend:追加,从一个容器中将所有元素添加到列表中
list1.extend('123')
list1.extend(['Going', 'UI'])
print(list1)
# ['Java', 'Python', 'C', '1', '2', '3', 'Going', 'UI']
- 改
有序容器【下标】 = 值
list1[5] = 'Java'
print(list1)
- 删
del:del有序容器[下标],若下标越界,会报错;
del list1[6]
print(list1)
remove:根据元素删除,从左到右删除,如果某个元素重复,一次只删除1个
list1.remove('3')
list1.remove('Java')
print(list1)
pop
- pop如果不给pop指定元素,删除的是列表中最后一个元素;或者给pop指定下标
- pop方法可以告诉你删除的是哪个元素
list1.pop()
print(list1)
print(list1.pop(0))
print(list1)
clear
list1.clear()
print(list1)
四、列表的相关方法
- 查找列表中元素:index
- index 方法默认从左向右查找,找到元素立即停止查找,返回下标
- 可以指定index开始查找元素的位置,index找不到元素会报错
list1 = ['Java', 'python', 'Java']
result = list1.index('Java')
print(result)
result1 = list1.index('Java', 1)
print(result1)
- sum、max、min操作对象必须是数字(列表中全是数字)
num_list = [1, 2, 3, 4, 5]
print(sum(num_list))
print(max(num_list))
# print(5 > 'a') # TypeError: '>' not supported between instances of 'int' and 'str'
- reverse:将列表倒序
num_list = [1, 2, 3, 4, 5]
num_list.reverse()
print(num_list)
- sort、sorted:对列表排序
- sort默认升序排序,修改列表本身。如果reverse=True,降序排列
- sorted默认升序排序,不修改原列表,如果reverse=Ture,降序排序
list2 = [2, 5, 1, 7, 0]
list2.sort()
list2.sort(reverse=True) # 逆序
print(list2)
list3 = [2, 5, 1, 7, 0]
print(sorted(list3), list3)
print(list3)
- count:统计某个元素出现次数
list3 = [2, 5, 1, 7, 0]
print(list3.count(2))
print(list3.count(9))
五、列表的推导式
列表推导式(列表生成式)
生成有元素的列表(在某些场景下能代替append)
性能比较:列表推导式 > append
- [表达式 for 变量 in 容器]
# 将100以内5的倍数添加到列表中
# 使用append方法
list1 = []
for i in range(0, 101, 5):
list1.append(i)
print(list1)
# 使用列表推导式
list2 = [ i for i in range(0, 101, 5)]
print(list2)
- 将某个元素在列表中重复N次
- 如果for中变量没有实际意义,可以使用下划线”_“代替
# 列表中[1,2,3]生成10个该元素
list3 = [[1, 2, 3] for _ in range(10)]
print(list3)
- [符合条件的表达式 for 变量 in 容器 if 条件]
list4 = [i for i in range(101) if i % 5 == 0]
print(list4)
list5 = [True if i % 5 == 0 else False for i in range(11)]
print(list5)
- [表达式 for 变量i in 容器1 for 变量2 in 容器2]
list6 = [f'{i} * {j} = {i * j}' for i in range(1, 10) for j in range(1, i+1)]
print(list6)
列表推导式的换行
import random
score = [[random.randint(0, 100) for _ in range(3)] for _ in range(5)]
print(score)
score1 = [
[random.randint(0, 100) for _ in range(3)]
for _ in range(5)
]
print(score1)
num = 1 \
+ \
2 \
+ \
3 + \
4 + 5 + 6 + \
10
print(num)