day6_python基础内容四——列表


前言

Python学习的第6天,今天主要学习基础语法中的列表,主要学习内容包含:列表的概念、如何获取列表元素、列表的增删改操作、in和not in操作、列表相关运算符、列表相关函数、列表相关方法。并补充学习了Python中三目运算符的知识。


# 一、列表

列表是Python中常见的容器型数据类型。在Python中,变量可分为非容器型数据类型的变量和容器型数据类型的变量;
非容器型数据类型 — 相当于一个盒子里面只有一个格子,所以同一时间只能保存一个数据。例如:int、float、bool、None
容器型数据类型 — 相当于一个盒子里面有多个格子,每个格子可以存储不一样的数据,所以同一时间就可以保存多个数据。例如:list、dict、set、tuple、str等。
容器型数据类型变量存在的意义:可以批量处理数据,大大提高了效率。
列表属于序列的一种,序列是Python中最基本的数据结构,序列都可以做的操作包括:查、增、删、改、成员判断。

1.列表的概念

1)什么是列表
列表list是容器型数据类型,将[]中括号作为容器标志,里面多个元素用逗号隔开。
元素:指的是容器中每一个独立的数据
list = [元素1, 元素2, 元素3, 元素4, 元素5,…]

2)容器的特点:从两个角度进行讲解:可变性和有序性
容器的可变性分为
①可变:可变指的是容器支持增删改操作
②不可变:不可变指的是容器不支持增删改操作
容器的有序性分为
①有序:容器有序指的是容器支持下标index操作
②无序:容器无序指的是容器不支持下标index操作

3)列表的特点
①列表是可变的:可变指的是元素的个数、值和顺序可变 — 支持增删改操作
②列表是有序的:容器有序指的是容器支持下标index操作
列表中元素:任何类型的数据都可以作为列表的元素,同一个列表中的元素可以是不同类型的数据。(列表对数据类型没有要求)

2.列表的操作(重点)

2.1查

列表的查即获取列表元素,获取列表元素有三种情况:一是获取单个元素;二是获取部分元素(切片);三是获取全部元素(遍历)。

2.1.1 获取单个元素
语法:
列表[下标]

说明:
①列表	——	任何结果是列表的表达式,例如:保存列表的变量或者具体的列表数据
②[]	——	方括号,固定写法
③下标	——	下标是有序序列中元素的位置信息。下标:index,下标又叫索引。
            python中有序序列中元素的下标有两种:
           第一种下标值:从前到后下标值从0开始依次增加(正向下标):index = [0, 1, 2, 3, 4, 5,...]
           第二种下标值:从后往前下标值从-1开始依次减少(负向下标):index = [..., -5, -4, -3, -2, -1]                       

示例:

list1 = [1, 34, 5, 23]
print(list1[0])     # 获取list1中下标是0的元素---> 1
print(list1[1])     # 获取list1中下标是1的元素---> 34
print(list1[3])     # 获取list1中下标是3的元素(最后一个值)---> 23
print(list1[-1])    # 获取list1中下标是-1的元素(倒数第一个值)---> 23
print(list1[-2])    # 获取list1中下标是-2的元素(倒数第二个值)---> 5
2.1.2 切片 — 获取部分元素(使用最多)

切片的三步骤:

  1. 确定是否可以获取到数据,如果开始下标到结束下标的方向和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致,就可以取到数据,否则就是空值。(可以看开始下标值的正负和步长(正负)的正负:同向(同正或者同负)可取到,异向(正负或者负正)取不到)
  2. 确定有效范围(位置信息):开始下标对应的元素可以取到,结束下标对应的元素取不到
  3. 确定切片结果:在有效范围内按照步长绝对值取数据;绝对值为1就一个一个的取,绝对值为2就跳一个取一个,绝对值为2就跳两个取一个,绝对值为4就跳三个取一个。
1) 语法1(完整语法):
列表[开始下标: 结束下标: 步长]

说明:
①取值方向问题:
    开始下标到结束下标的方向和步长对应的方向(步长为正表示从前往后,步长为负表示从后往前)一致,就可以取到数据。
    开始下标到结束下标的方向如果和步长对应的方向不一致,一定取不到数据就是空值。
②步长step:步长为正,从前往后取,正向下标;步长为负,从后往前取,负向下标。
③结束下标值对应的元素取不到。

示例:

#练习1:写出以下表达式的打印结果
heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑']
print(heroes[0:5:2])                # ['李白', '张飞',  '刘备']
print(heroes[1:-2:-1])              # []
print(heroes[2:-2:2])               # ['张飞', '刘备']
print(heroes[-2:0:-3])              # ['瑶', '关羽']
print(heroes[-1:-4:1])              # []
print(heroes[0:6:3])                # ['李白', '关羽']
print("-------------------分割线----------------------")
# 练习2:已知列表heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑'],写切片获取指定内容(应用最多):
print(heroes[2:5:1])        # ['张飞', '关羽', '刘备']
print(heroes[0:4:1])        # ['李白', '李信', '张飞', '关羽']
print(heroes[-2:-5:-1])     # ['瑶', '安琪拉', '刘备']
print(heroes[1:6:2])        # ['李信',  '关羽',  '安琪拉']
print(heroes[-1:-4:-2])     # ['孙膑', '安琪拉']
print(heroes[1:-1:5])       # ['李信', '瑶']
2)语法2:省略步长
列表[开始下标: 结束下标]      #默认步长为1

3)语法3:省略开始下标    	#默认从列表的最开始元素取(列表的最开始元素由步长的正负确定)
列表[:结束下标]   /   列表[: 结束下标:步长]
①列表[:结束下标]			#默认步长为1   
②列表[: 结束下标:步长]	#如果步长为正,从第一个元素开始往后取,一直取到结束下标对应元素的前一个元素为止;如果步长为负,从倒数第一个元素开始从后往前取,一直取到结束下标对应元素的前一个下标对应元素为止。

4)语法4:省略结束下标    #默认取到列表的最后一个数(列表的最后一个数由步长的正负决定)
列表[开始下标:]   /   列表[开始下标: :步长]   
①列表[开始下标: :步长]   #如果步长为正,从开始下标开始从前往后取,取完为止;如果步长为负,从开始下标开始从后往前取,一直取完结束。
②列表[开始下标:]  		#默认步长为1

5)语法:省略开始下标和结束下标
列表[: : 步长]  			#如果步长为正,从开始下标开始从前往后取,取完为止; 如果步长为负,从开始下标开始从后往前取,取完为止。
# 练习3:已知列表heroes = ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉', '瑶', '孙膑'],写切片获取指定内容(应用最多):
print(heroes[2:5])          # ['张飞', '关羽', '刘备']
print(heroes[3::-2])        # ['关羽', '李信']
print(heroes[-3::-1])       # ['安琪拉', '刘备', '关羽', '张飞', '李信', '李白']
print(heroes[:-4:2])        # ['李白', '张飞']
print(heroes[1::3])         # ['李信', '刘备', '孙膑']
print(heroes[:-2])          # ['李白', '李信', '张飞', '关羽', '刘备', '安琪拉']
2.1.3 遍历 — 将元素一个一个的全部取出来即获取全部元素(应用也是最多)
方法一:直接获取元素
for循环:
for 变量 in 列表:		#此处变量依次获取的就是列表中的每一个元素
    循环体

方法二:通过获取每个元素的下标来获取元素
for 变量 in range(列表长度):		#此处的变量依次获取的是列表中元素的下标
    循环体

补充:获取列表的长度— len(列表)

示例:

# 练习4:已知学生的分数scores = [90, 78, 54, 67, 88, 30, 59]中保存所有学生的分数:
#1)统计不及格的学生人数
# 2)计算学生平均分
scores = [90, 78, 54, 67, 88, 30, 59]
count = 0
sum1 = 0
average_scores = 0
for x in scores:
    sum1 += x
    average_scores = sum1 / len(scores)
    if x < 60:
        count += 1
print(count, average_scores)

print('------------分割线------------------------')

scores = [90, 78, 54, 67, 88, 30, 59]
count = 0
sum1 = 0
average_scores = 0
for index in range(len(scores)):
    sum1 += scores[index]
    average_scores = sum1 / len(scores)
    if scores[index] < 60:
        count += 1
print("不及格的学生人数:", count, '\n学生平均分:', average_scores)
2.2 增 —— 添加元素
1)追加—— append:追加;添加;附加
语法:列表.append(元素)   —   将小括号中的元素添加到列表中的最后位置

2)插入 —  insert:插入,嵌入
语法:列表.insert(下标, 元素)   —   将小括号中的元素添加到列表中下标对应的元素的前面

列表.append(元素) 示例:

list1 = [1, 2, 3, 4]
print(list1)
# 在列表list1中添加元素11
list1.append(11)
print(list1)
# 练习:scores保存多个学生的分数,提取所有分数中不及格的分数
scores = [90, 78, 65, 45, 55, 89, 99]
new_scores = []
for x in scores:
    if x < 60:
        new_scores.append(x)
print(new_scores)

列表.insert(下标, 元素) 示例:

nums = [10, 23, 30, 40]
print(nums)
# 在nums列表中元素30前插入一个数据100
nums.insert(2, 100)
print(nums)			#[10, 23, 100, 30, 40]
# 练习:已知一个列表,列表中的元素已经从小到大排好序,插入输入的数据,要求插入后不影响顺序。
nums1 = [12, 23, 56, 78, 99, 120]
# 插入80   -> [12, 23, 56, 78, 80, 99, 120]
# 插入2    ->  [2, 12, 23, 56, 78, 99, 120]

value = 98
for index in range(len(nums1)):
    if nums1[index] > value:
        nums1.insert(index, value)
        break
else:
    nums1.append(value)
print(nums1)
2.3 删 —— 删除元素
1)语法1del 列表[下标]    — 删除指定下标对应的元素

2)语法1:
列表.remove(元素)   —   删除指定的元素
#如果元素不存在会报错:
#如果列表中有多个相同元素,只删除最前面的那个元素:

3)语法:pop:弹出
列表.pop()    —   取出最后一个元素
列表.pop(下标)  —   取出指定下标对应的元素

示例:

#已知列表tvs = ['海贼王', '大秦帝国', '七龙珠', '还珠格格', '甄嬛传', '大秦帝国', '伪装者', '秦时明月', '亮剑', '大秦帝国'],根据要求输出结果。
tvs = ['海贼王', '大秦帝国', '七龙珠', '还珠格格', '甄嬛传', '大秦帝国', '伪装者', '秦时明月', '亮剑', '大秦帝国']
del tvs[2]
print(tvs)		# ['海贼王', '大秦帝国', '还珠格格', '甄嬛传', '大秦帝国', '伪装者', '秦时明月', '亮剑', '大秦帝国']

tvs.remove('还珠格格')
print(tvs)		#['海贼王', '大秦帝国', '甄嬛传', '大秦帝国', '伪装者', '秦时明月', '亮剑', '大秦帝国']

tvs.remove('大秦帝国')
print(tvs)		#['海贼王', '甄嬛传', '大秦帝国', '伪装者', '秦时明月', '亮剑', '大秦帝国']

tvs.pop()
print(tvs)		#['海贼王', '甄嬛传', '大秦帝国', '伪装者', '秦时明月', '亮剑']

tvs.pop(1)
print(tvs)		#['海贼王', '大秦帝国', '伪装者', '秦时明月', '亮剑']

del、remove和pop的区别:
del、remove是将列表中的元素彻底删除,内存中再也没有该元素了;
pop相当于将列表中的元素移出该列表,但是该元素没有消失,仅仅只是移出该列表,该元素还存在。

2.4 改 —— 修改元素

修改列表中的元素的值,其它元素以及下标不动。
语法:

列表[下标] = 值          —   将列表中指定下标对应的元素改成指定的值

示例:

# 练习:将scores中所有不及格的分数改为0分:
scores = [90, 34, 89, 55, 88]
for index in range(len(scores)):
    if scores[index] < 60:
        scores[index] = 0
print(scores)

练习:

#已知最喜爱的电影列表favorite_movies = ['放牛班的春天', '长津湖', '战狼', '环太平洋', '金刚'],根据以下要求进行操作打印。
favorite_movies = ['放牛班的春天', '长津湖', '战狼', '环太平洋', '金刚']
favorite_movies[0] = '刺客信条'  #将下标0对应的元素‘放牛班的春天’改成元素‘刺客信条’
print(favorite_movies)    # ['刺客信条', '长津湖', '战狼', '环太平洋', '金刚']
favorite_movies.append('速度与激情8')   #追加'速度与激情8'
print(favorite_movies)      #['刺客信条', '长津湖', '战狼', '环太平洋', '金刚', '速度与激情8']
favorite_movies.insert(2, '雪国列车')   #在下标为2的对应元素的前面插入'雪国列车'
print(favorite_movies)       # ['刺客信条', '长津湖', '雪国列车', '战狼', '环太平洋', '金刚', '速度与激情8']
del favorite_movies[-1]     # 删除下标-1的对应元素
print(favorite_movies)      # ['刺客信条', '长津湖', '雪国列车', '战狼', '环太平洋', '金刚']
favorite_movies.remove('环太平洋')      #删除指定元素'环太平洋'
print(favorite_movies)     # ['刺客信条', '长津湖', '雪国列车', '战狼', '金刚']
favorite_movies.pop()       # 删除最后一个元素
print(favorite_movies)      # ['刺客信条', '长津湖', '雪国列车', '战狼']
favorite_movies.pop(0)      #删除下标0的对应元素
print(favorite_movies)      # ['长津湖', '雪国列车', '战狼']
2.5 in操作 —— 成员判断
元素 in 列表 — 判断列表中是否存在指定的元素
元素 not in 列表    —   判断列表中是否不存在指定的元素

判断的结果为TrueFalse

3.列表相关

3.1 列表相关的运算符

1.数学运算符:+ 、 *
1)加 + —— 用于两个列表的拼接,实现将两个列表中的元素合并产生一个新的列表

语法:列表1 + 列表2

2)乘 * —— 实现将列表中的元素重复多次形成新的列表

语法:列表 * N   /   N * 列表
#(N为正整数)
#列表中的元素重复N次产生一个新的列表

2.比较运算符:(比较大小的数据其数据类型要一致)
补充:不同的类型可以使用 == 和 != 来比较是否相等,但是不能使用< 、> 、>= 、<= 来比较大小

  1. == 、!=

  2. < > >= <=
    两个列表比较大小,比较的是第一对(下标相等)不相等的元素的大小

print([12, 34, 45, 57] > [23, 34, 56, 66])          # False
print([12, 34, 45, 57] > [12, 34, 35, 66])              # True
3.2 列表相关函数
3.2.1 max、 min — 最大值、最小值
max(序列)   —   获取序列中最大的元素
min(序列)   —   获取序列中的最小元素

要求:序列中的元素可以比较大小,元素的数据类型要一致

3.2.2 sum — 求和函数
sum(数字序列)     —   求序列中所有的元素的和
3.2.3 sorted — 排序
sorted(序列)     ——将序列中的元素从小到大排序(升序),产生一个新的列表。
sorted(序列, reverse=True) ——将序列中的元素从大到小排序(降序),产生一个新的列表。
3.2.4 len
len(序列)       —   获取序列中的元素的个数(获取序列的长度)
3.2.4 list — 类型转换
list(序列)    —— 所有的序列都可以转换成列表,将序列的元素作为列表的元素创建一个新的列表
3.3 列表相关方法
#方法1:
列表.clear()	————清空列表

#方法2:
列表.copy()		————复制列表产生一个一模一样的新列表,此处的copy只是复制列表中的值,copy后产生的列表其地址与原列表的地址不同。
#①列表.copy()  —  浅拷贝
#②列表[:]、列表*1、列表+[]	——	都是浅拷贝

#方法3:
列表.count(元素)		————统计列表中指定元素的个数

#方法4:
列表.extend(序列)	————将序列中的元素全部添加到列表中(批量添加)
# 列表.append()	————只添加一个元素

#方法5:
列表.index(元素)		————获取元素在列表中的下标值(返回正向下标值)
# 1)情况一:如果元素在列表中有多个,列表.index(元素)只返回第一个出现的元素
# 2)情况二:如果元素不在列表中,列表.index(元素)则会报错

#方法6:
列表.reverse()        ——    列表逆序,不会产生新的数据

#方法7:
列表.sort()		————排序
# 列表.sort()	————从小到大排序(升序)
# 列表.sort(reverse=True)	————从大到小排序(降序)
3.4 列表推导式

列表推导式快速创建列表的表达式。

3.4.1 推导式结构1
[表达式 for 变量 in 序列]    ————让变量在序列中取值,一个一个的取,取完为止,每取一个值就将表达式的值作为列表的一个元素。
#此处的表达式一般和变量相关

示例

# 练习1:使用列表推导式获取nums中所有元素的个位数
nums = [23, 89, 90, 56, 41, 802]
new_nums = [x % 10 for x in nums]
print(new_nums)		# [3, 9, 0, 6, 1, 2]

# 练习2:是用列表推导式将nums中所有的元素乘以10
# [230, 890, 900, 560, 410, 8020]
nums = [23, 89, 90, 56, 41, 802]
new_nums1 = [i * 10 for i in nums]
print(new_nums1)		# [230, 890, 900, 560, 410, 8020]

# 练习3:已知分数列表,将列表中的元素全部换成'及格' - True 或者'不及格'-False
# ['及格', '及格', '不及格', '及格', '不及格', '及格']
# [True, True, False, True, False, True]
scores = [90, 78, 45, 67, 39, 89]
new_scores = [x >= 60 for x in scores]
print(new_scores)	# [True, True, False, True, False, True]
# 三目运算符:根据条件二选一
new_scores1 = ['及格' if x >= 60 else '不及格' for x in scores]
print(new_scores1)	#['及格', '及格', '不及格', '及格', '不及格', '及格']
3.4.2 推导式结构2
[表达式 for 变量 in 序列 if 条件语句]     ————让变量在序列中取值,一个一个地取,取完为止,每取一个值就判断条件语句是否为True,如果为True就计算表达式的结果为列表的元素。

示例:

# 练习1:使用列表推导式提取nums中所有的奇数
nums = [23, 89, 90, 56, 41, 802]
result = [x for x in nums if x % 2]
print(result)		# [23, 89, 41]

# 练习2:已知一个列表,提取列表中所有的字符串
list1 = [10, 23.9, 'hello', True, '12', 0]
result1 = [i for i in list1 if type(i) == str]
print(result1)		# ['hello', '12']

# 练习3:已知一个列表,提取列表中所有的整数,并且将整数加3
list1 = [10, 23.9, 'hello', True, '12', 0]
list2 = [x+3 for x in list1 if type(x) == int]
print(list2)		#[13, 3]

三目运算符
在python中三目运算符的语法:

1 if 表达式 else2      —     如果表达式的值为True结果就是值1,否则结果就是值2

总结

今日学习列表及其相关知识,在python中列表和元组是应用较多的序列。系统的学习将为今后学习其它数据结构打下基础。对于文中出现的语法需要多记多记,以便能够在应用时拿得出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值