我滴python第三课

本文介绍了Python中的列表操作,包括浅拷贝与深拷贝的区别,以及如何实现列表元素的循环移动、排序和随机操作。此外,还讲解了random模块的使用,如生成随机数。最后,通过一个案例展示了如何利用内置函数处理列表,如计算平均值、中位数等,并介绍了列表推导式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每周记笔记的话,就发现时间过得好快哦。。

一、浅拷贝&深拷贝

1.1浅拷贝
如果对赋值操作右侧的列表使用切片,而把切片的起止索引都留空,那就会产生原切片的拷贝

b = a[:]
assert == a and b is not a

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 内存地址不相同
alist = [123,"hello",["python","c++"]]
blist = alist[:]#切片,浅拷贝
print(id(alist),id(blist))
#46752136 46753736两者内存地址不相同
  • 不是同一个对象但列表元素完全一样
print(alist is blist)#False
print(alist == blist)#True
  • 不可变数据类新
alist = [123,"hello",["python","c++"]]
blist = alist[:]#切片,浅拷贝
blist[0] = 456
print(blist,alist)
#[456, 'hello', ['python', 'c++']] [123, 'hello', ['python', 'c++']]修改新的对象不会影响另一个

1.2深拷贝(Deep Copy)

import copy
alist = [123,"hello",["python","c++"]]
blist = copy.deepcopy(alist)
print(blist)

在这里插入图片描述

二、案例

  • 给定一个列表,将列表中的元素循环向右移动 k 个位置,其中 k 是非负数。输出右移后的列表。
oldList=[1,2,3,4,5,6]
k=int(input("输入整数k:"))
if oldList:
  k = k % len(oldList)
  while k > 0:
    k -= 1
    oldList.insert(0, oldList[-1])
    oldList.pop()
print(oldList )

三、列表排序

  • 使用列表对象的sort()方法进行原地排序,支持多种不同的排序方法。
aList = [3, 4, 5, 6, 7,9,11, 13, 15, 17]
import random
random.shuffle(aList)
print(aList)#[3, 4, 15, 11, 9, 17, 13, 6, 7, 5]打乱顺序
aList.sort() #默认是升序排序                         
aList.sort(reverse = True)#降序排序
print(aList)#[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
aList.sort(key = lambda x:len(str(x)))#按转换成字符串的长度排序
print(aList)#[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
  • 使用内置函数sorted()对列表进行排序并返回新列表
print(aList)#[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
print(sorted(aList))#升序排序[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
print(sorted(aList,reverse = True))#降序排序[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
  • 使用列表对象的reverse()方法将元素原地逆序
aList = [3, 5, 7, 9, 11, 13, 15, 171921]
print(aList.reverse())
#[21,19,17, 15, 13, 11, 9, 7, 5, 3]
  • 使用内置函数reversed()对列表元素进行逆序排列并返回迭代对象
aList = [3, 5, 7, 9, 11, 13, 15, 171921] 
newList = reversed(aList)#返回reversed对象
list(newList)#把reversed对象转换成列表[21,19,17, 15, 13, 11, 9, 7, 5, 3]

四、random函数

import random
print(random.randint(1,10)) #输出1~10中一个整数的随机数
print(random.random()) #产生0~1之间的随机浮点数
print(random.uniform(1.1,5.4)) #产生1.1导5.4之间随机浮点数,区间可以不是整数
print(random.choice('tomorrow'))#从列表随机选取一个元素
print(random.randrange(1,100,2))#输出1~100之间间隔为2的随机整数
a = [1,3,5,6,7]
random.shuffle(a)#将序列a中的元素打乱
print(a)

五、用于序列操作的常用内置函数

  • len(列表):返回列表中的元素个数,同样适用于元组、字典、集合、字符串等。
  • max(列表)、 min(列表):返回列表中的最大或最小元素,同样适用于元组、字典、集合、range对象等。
  • sum(列表):对列表的元素进行求和运算,对非数值型列表运算需要指定start参数,同样适用于元组、range。
print(sum(range(1, 11)))      #sum()函数的start参数默认为0
#55
print(sum(range(1, 11), 5))  #指定start参数为5,等价于5+sum(range(1,11))
#60
print(sum([[1, 2], [3], [4]], []))  #这个操作占用空间较大,慎用
[1, 2, 3, 4]

案例1:有10名同学的python课程成绩分别为:94, 89, 96, 88, 92, 86, 69, 95, 78, 85,计算并输出:平均值、最高的3个成绩、最低的3个成绩、成绩中位数。

scores = [94,89,96,88,92,86,69,95,78,85]
count = len(scores)#取得成绩个数
print(sum(scores)/count)
scores.sort()
print("最高的三个成绩为:",scores[-1:-4:-1])
print("最低的三个成绩为:",scores[0:3])
#求中位数的法1:
if count % 2 == 0:
    median=(scores[count//2-1]+scores[count//2])/2
else:
    median=scores(count//2)
#求中位数的法2:
print("成绩的中位数是:{:.2f}".format(median))

六、列表推导式

列表推导式在内部实际上是一个循环结构,只是形式更加简洁,例如:

alist = [x*x for x in range(10)]

相当于:

alist = []
for x in range(10):
    alist.append(x*x)

也相当于:

alist = list(map(lambda x: x*x,range(10)))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值