3.14 列表

本文详细介绍了Python列表的基础知识,包括列表的创建、特点、元素的类型,以及列表的查询(单个元素、切片)、遍历、增删改操作。同时,文章还涵盖了列表的函数如sum、max、min、sorted、len和list的使用,以及列表的加法、乘法、比较和成员运算。此外,文中还通过实例讲解了如何查找列表的公共元素以及列表的赋值问题,特别是拷贝与直接赋值的区别。
摘要由CSDN通过智能技术生成

列表 (list)

列表基础

  • 如果要同时处理多个数据,可以考虑列表

1.列表是容器型数据类型(序列);将[]作为容器的标志,里面多个数据用逗号隔开:[数据1,数据2,数据3…]
2.列表是可变的(可变指的是列表中的个数和元素的值可变 - 列表支持增删改)
列表是有序的(元素有顺序对应的位置信息;元素的顺序影响结果 - 列表支持索引操作)
3.列表对元素的要求:没有要求,任何类型的数据都可以作为列表的元素

注:元素 - 容器中每一个独立的数据,就是这个容器的元素

# 1)空列表
list1 = [ ]
print(list)

# 2) 列表是有序的
print([10, 20, 30] == [30, 20, 10])     # False
print({10, 20, 30} == {20, 10, 30})     # True 集合无序,顺序不影响结果

# 3) 列表元素可以是任何类型的数据
list2 = [10, 20, 30]
names = ['小明', '小花', '小张']

# b.一个列表的元素可以是不同类型的数据
list3 = [10, 20, 20.5, True, None, '小张']

# c.列表中的元素也可以是列表
list4 = [45, 20, [10, 20]]

列表查询操作 (获取列表中的元素的值)

1.查单个 - 获取一个元素

  1. 语法:
    列表[索引]
    说明
    列表 - 需要获取元素的列表对象(可以是保存一个列表的变量,也可以是具体的列数据)
    [] - 固定写法
    索引 - 又叫下标;指的是元素在列表中的位置信息
    列表一旦确定,列表中每个元素对应的索引就确定
    a:元素从前往后索引从0开始
    b:元素从后往前从-1开始不断减少
nums = [10, 20, 30, 40]
print(nums[1])
print([10, 20, 30, 40][1])
print(nums[-1]) #40 负向索引
print(nums[3])  #40 正向索引

#print(nums[-6])    #报错!索引越界

2. 切片 - 同时获取多个元素(列表结果的结果是列表)

1) 完整语法:

列表[开始下标:结束下标:步长]

a.说明
列表 - 需要获取元素列表
[] - 固定写法
开始下标、结束下标、步长 - 必须是整数
开始下标 - 决定从哪开始取
结束下标 - 决定从哪结束
步长 - 决定取的时候怎么取(是一个一个的按顺序取,还是跳着取,从前往后取还是从后往前取)

b.确定切片结果
第一步:先确定结果是否为空,看开始下标对应的位置方向和步长的方向是否一致
一致结果不为空,不一致结果一定为空
第二步:如果结果不为空,再确定切片的有效范围:开始下标对应的元素能取到,结束下标对应元素取不到
第三步:在有效范围内按照步长的方向和绝对值获取元素。
方向: 步长为正,从开始下标到结束下标从前往后取;步长为负从后往前取
绝对值:绝对值为1,就1个1个的取;绝对值为2,取1个跳1个;绝对值为3:取1个跳过2个在取一个

c:怎么写切片代码获取指定元素
确定开始下标: 需要的结果中第一个数据在列表的下标
确定结束下标: 结束下标是结果中最后一项的后一个数据或者前一个数据的下标(看方向)
确定步长:正负看趋势(从前往后取还是从后往前取);再看绝对值

movies = ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
print(movies[1:3:1])
print(movies[0:-2:2])
print(movies[5:0:2])
print(movies[3:-1:-1])
print(movies[-2:2:-2])
print(movies[6:2:-3])
print(movies[1:-3:3])
print(movies[1:-1:1])       # '霸王别姬','阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神'
print(movies[-1:1:-2])      #  '复仇者联盟','蚁人','蜘蛛侠','阿甘正传'
print(movies[-2:5:2])       # []
print(movies[0:-2:4])       # '肖生克的救赎','蜘蛛侠'
print(movies[5:-1:2])       # '蝙蝠侠','雷神'
print(movies[6:-6:-1])      # '蚁人''蝙蝠侠','蜘蛛侠'
2) 切片省略的写法

完整的切片语法:列表[开始下标:结束下标:步长]

a.省略步长:列表[开始下标: 结束下标]
省略步长 - 默认步长为1

b.省略开始下标 - 获取元素从头开始取(步长为正,从第一个元素开始取;步长为负,从最后一个元素开始取)
列表[:结束下标:步长]

c.省略结束下标 - 获取元素时从开始下标开始,取完为止(有可能取到最后一个,也有可能取到第一个)
完整的切片语法:列表[开始下标::步长]

# movies = ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
print(movies[:-2:2])    # '肖生克的救赎','阿甘正传','蜘蛛侠','蚁人'
print(movies[:2:-2])    # '复仇者联盟','蚁人','蜘蛛侠'
print(movies[4])       # '肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠'

movies = ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
print(movies[2::2])    # '阿甘正传','蜘蛛侠','蚁人','复仇者联盟'
print(movies[4::-1])   # '蜘蛛侠','钢铁侠','阿甘正传','霸王别姬','肖生克的救赎'
print(movies[3:])      # '钢铁侠','蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟'

3. 遍历 - 一个一个的获取列表中的所有元素

方法1:
for 变量 in 列表:
循环体(变量依次获取到的就是列表中的每个元素)

方法2:
通过获取所有元素的下标来获取元素
for 变量 in range(len(列表长度)):
循环体(列表[变量])

方法3:
for 变量1,变量2 in enumerate(列表):
循环体(变量1依次获取的是每个元素的下标;变量2依次获取的是每个元素)

scores = [90, 89, 87, 81, 79, 93, 67, 56, 43, 99]
# 方法1:  -   直接获取元素
for x in scores:
    print(x)

# 方法2
scores = [90, 89, 87, 81, 79, 93, 67, 56, 43, 99]
for x in range(len(scores)):
    print(x, scores[x])

# 方法3
for index,item in enumerate(scores):
    print('index:', index, 'item:', item)

列表的增删改操作

1.增 - 添加元素

(1)列表.append(元素) - 在指定列表的最后添加指定的元素(不会产生新列表)

heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女']
heros.append('剑圣')
print(heros)	# ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女','剑圣']

scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]

# 案例:提取scores中所有不及格的分数
#[45,29,59]
new_scores = []
for s in scores:
    if s < 60:
        new_scores.append(s)
print(new_scores)
# 练习1:利用append删除列表中所有的奇数
nums = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
new_nums = []
for i in nums:
    if i % 2 == 0:
        new_nums.append(i)
print(new_nums)

# 练习2:将scores中所有不及格的分数改成'补考'
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
[89, '补考', 99, 65, 93, 81, '补考', 88, 76, '补考', 66]
new_scores = []
for s in scores:
    if s < 60:
        new_scores.append('补考')
    else:
        new_scores.append(s)
print(new_scores)

(2) 列表.insert(下标,元素) - 将指定元素插入到列表中指定下标对应的元素前

heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女']
print(heros)

heros.insert(-1,'亚索')
print(heros)

heros.insert(2,'石头人')
print(heros)

2.删 - 删除元素

(1) del 列表[下标] - 删除列表中指定下标对应的元素(在原列表中修改)

heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女']
del heros[1]
print(heros)

(2) 列表.remove(元素) - 删除列表中的指定元素(如果元素不存在会报错)

heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女','金克斯']
heros.remove('小炮')
print(heros)	#  ['寒冰射手','维鲁斯','金克斯','小法','卡牌','蛇女','金克斯']

heroes.remove('塔姆')   # 列表中没有该元素报错

#列表中有多个重复值,默认删除第一个
heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女','金克斯']
heros.remove('金克斯')
print(heros)	# ['寒冰射手','小炮','维鲁斯','小法','卡牌','蛇女','金克斯']

(3) 列表.pop() - 取出列表最后一个元素,并返回
​ 列表.pop(下标) - 取出列表中指定下标对应的元素,并返回

heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女']
heros.pop()
result = heros.pop()
print(heros,result)

heros.pop(0)
print(heros)

3.改 - 修改元素的值

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

heros = ['寒冰射手','小炮','维鲁斯','金克斯','小法','卡牌','蛇女']
print(heros)

heros[1] = '孙悟空'
print(heros)	# ['寒冰射手','孙悟空','维鲁斯','金克斯','小法','卡牌','蛇女']
# 练习:将scores中所有低于60分的成绩修改成0分(使用改)
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
# 方法1:
for index in range(len(scores)):
   if scores[index] < 60:   #取出小于60的下标
       scores[index] = 0
print(scores)

#方法2:
scores = [89, 45, 99, 65, 93, 81, 29, 88, 76, 59, 66]
for index,item in enumerate(scores):
    if item < 60:
        scores[index] = 0
print(scores)

列表相关函数

1. sum(数字序列) 求数字序列中所有元素的数值和

scores = [98, 23, 56, 88, 90, 62]
result = sum(scores)
print(result)

result = sum(range(101))
print(result)

2. max min

(1) max(序列) - 求序列中的最大元素
(2) min(序列) - 求序列中的最小元素

 scores = [98, 23, 56, 88, 90, 62]
 result = max(scores)
 print(result)
 
 result = min(scores)
 print(result)
 
 # 补充:求最大值的逻辑
 # 假设第一个元素是最大值保存到变量中,然后依次取到后面的每个元素和保存最大值的变量进行比较,如果取到的数比最大值还大,就更新最大值
 scores = [50, 98, 23, 56, 88, 90, 62]
 max1 = scores[0]
 for x in scores[1:]:
     if x > max1:
         max1 = x
 print(max1)
 
 min1 = scores[0]
 for i in scores[1:]:
     if x < min1:
         min1 = x
 print(min1)

3. sorted

(1) sorted(序列) - 将序列中的元素按照从小到大的方式排序,创建一个新的列表

scores = [50, 98, 23, 56, 88, 90, 62]
result = sorted(scores)    # [23, 50, 56, 62, 88, 90, 98]
print(result)

(2) sorted(序列,reverse=True) - 将序列中的元素按照从大到小的方式排序,创建一个新的列表并排序

scores = [50, 98, 23, 56, 88, 90, 62]
result = sorted(scores, reverse=True)
print(result)

4. len

len (序列) - 统计序列中元素的个数

print(len(scores))  # 7
print(len('abd1533'))   # 7
print(len(range(2, 5)))  # 3

5.list

list(序列) - 将指定的序列转换成列表(任何序列都可以转换成列表,转换的时候直接将序列中的元素作为列表中的元素)

result = list('abs1566')
print(result)   # ['a', 'b', 's', '1', '5', '6', '6']

result = list(range(5))
print(result)   # [0, 1, 2, 3, 4]

列表的相关操作

1.列表加法运算

列表1 + 列表2 - 将两个列表合并成一个新列表

A = [10, 20, 30]
B = [100, 200]
c = A + B
print(c)    # 新的列表不改变原列表

2.列表乘法运算

列表 *N、N * 列表 - 将列表中的元素重复N次产生一个新列表

C = A * 2
print(C)
print(B * 3)

3.列表比较运算

(1) 比较是否相等: ==、!=

print([10, 20, 30] ==[10,20,30])	# True

(2) 比较大小:>、<、>=、<=

# 列表1 > 列表2
# 两个元素比较大小,比较的是第一对不相等的元素的大小(相同位置上的元素是一对)
print([10, 20, 30] > [1, 100, 200, 300, 400]) #	True

4. in 和 not in

(1)元素 in 列表 - 判断列表中是否存在指定的元素

(2)元素 not in 列表 - 判断列表中是否不存在指定的元素

print(10 in[10,20,30]) 	# True
print(10 in [[10,20],30])	# False
print([10,20] in [10,20,30])	# False


# 练习:已经列表A和B, 打印A和B的公共元素
A = ['后羿', '甄姬', '鲁班7号', '赵云']
B = ['小乔', '孙悟空', '猪八戒', '后羿', '盾山', '赵云']
for x in A:
    if x in B:
        print(x)

列表赋值问题

补充:python中的变量保存数据,保存的是数据在内存中的地址(Python中的变量全部都是指针变量)

1. 拷贝和直接赋值

需求:已知一个列表,现在需要创建和原列表一模一样的新的列表
nums = [10, 20, 30, 40]

# 1)直接赋值  -  一个变量直接给另外一个变量赋值,赋的是地址,赋值后两个变量指向的是同一块内存
nums2 = nums
print('nums:', nums)
print('nums2:', nums2)	# [10, 20, 30, 40]

# 2)拷贝
# 一个变量通过拷贝的方式给另外一个变量赋值,赋值的时候会先复制原来变量中的数据,创建一个新的数据,然后将新的数据对应的内存地址给新的变量
nums3 = nums*1
print('nums3:', nums3)	# [10, 20, 30, 40]

nums4 = nums + []	
print('nums4:', nums4)	# [10, 20, 30, 40]

nums5 = nums[:]		
print('nums5:', nums5)	# [10, 20, 30, 40]

nums6 = nums.copy()
print('nums6:', nums6)	# [10, 20, 30, 40]

print('---------------------------------------修改后------------------------------------')
nums.append(100)
print('nums:', nums)	# [10, 20, 30, 40, 100]
print('nums2:', nums2)	# [10, 20, 30, 40, 100]
print('nums3:', nums3)	# [10, 20, 30, 40]
print('nums4:', nums4)	# [10, 20, 30, 40]
print('nums5:', nums5)	# [10, 20, 30, 40]
print('nums6:', nums6)	# [10, 20, 30, 40]

列表推导式:快速创建列表的表达式(代码简洁)

1.列表推导式结构1

(1) 语法:
[表达式 for 变量 in 序列]

(2) 让变量去序列中取值,一个一个的取,取完为止,每取一个值就计算一次表达式的结果,并且将计算结果作为列表的一个元素

result = [10 for x in range(5)]
print(result)   # [10, 10, 10, 10, 10]

result = [x*2 for x in range(5)]
print(result)   # [0, 2, 4, 6, 8]
# 案例1:将nums中所有元素乘以2
nums = [10, 23, 89, 67]
result = [x*2 for x in nums]
print(result)

# 案例2:将nums中所有元素的个位数
nums = [103, 230, 9, 67]
result = [x % 10 for x in nums]
print(result)

2.列表推导式结构2

(1)语法:
[表达式 for 变量 in 序列 if 条件语句]

(2)让变量去序列中取值,一个一个的取,取完为止,每取一个值就判断一次条件是否成立,如果成立就计算表达式值作为列表的元素

result = [x * 2 for x in range(5) if x % 2 == 0]
print(result)   # [0,4,8]

# 案例1:删除scores中所有不及格的分数
scores = [80, 99, 23, 97, 56, 82, 76, 45]
result = [x for x in scores if x >= 60]
print(result)

# 案例2:提取nums中所有奇数的个位数
nums = [103, 230, 89, 67, 78]
result = [x % 10 for x in nums if x % 2 !=0]
print(result)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值