Python学习第五章
序列,列表
1.序列类型
在python中,序列是基本的数据结构,主要利用序列进行的操作有更新,索引,切片,加,乘,删除等等。我们要熟练掌握牢记这些方法,运用于列表中。
2.列表的类型及操作
如何判断是一个列表呢,列表的特征是用方括号 [] 中的元素组成,内部是利用逗号隔开的元素,在查找删除等操作的时候可以指定某一个元素,其他元素依次输出。
列表的内置函数也要掌握清楚,例如
这里定义list = [‘西瓜霜’,‘云南白药’,‘万通筋骨贴’,‘甘草片’,‘薄荷叶’ ]
Len(list)为列表的长度
Max(list)返回当前列表的最大值
Min(list)返回列表的最小值
list = ['西瓜霜','云南白药','万通筋骨贴','甘草片','薄荷叶' ]
list1 = [1,2,3,4,5]
print("list的列表:" ,list)
print("列表的长度为:" ,len(list))
print("list1的列表:" ,list1)
print('列表的最大值为:' , max(list1))
print('列表的最小值为:' , min(list1))
同时要知道列表的脚本代码
列表和列表可以相加
列表的乘法
print('列表的相加:', list+list1) # 这里可以很清楚的看出 列表的相加是在list的列表后面加入list1的内容
print('列表的相乘:' , list1*3) # 列表的相乘是列表list1的自增 相当于 list1 + list1 + list1
3.列表推导式介绍
列表的索引 是从0开始而不是1开始,如果索引为负数,则是从后往前数
list = ['西瓜霜','云南白药','万通筋骨贴','甘草片','薄荷叶' ]
print(list[1]) # 这里的输出结果是云南白药,但是如列表可见,云南白药是在列表的第二个位置,所以列表的索引是从0开始的
#云南白药
print(list[-1])
#薄荷叶
修改某元素,可直接利用指定位置的修改
list = ['西瓜霜','云南白药','万通筋骨贴','甘草片','薄荷叶' ]
print('原列表为:', list)
list[1] = '红花油' # 这里修改列表的元素
print('修改后的列表为', list)
#['西瓜霜', '红花油', '万通筋骨贴', '甘草片', '薄荷叶']
在列表中的末尾添加元素,可以利用列表的append([需要添加的值 ])
方法
list = ['西瓜霜','云南白药','万通筋骨贴','甘草片','薄荷叶' ]
list.append('芥末')
print('修改后的:' ,list)
在列表中插入新的元素,可以利用 insert([插入的位置],[插入的值])
方法
list = ['西瓜霜','云南白药','万通筋骨贴','甘草片','薄荷叶' ]
list.insert(1,'维生素')
print('修改后的:' ,list)
#修改后的: ['西瓜霜', '维生素', '云南白药', '万通筋骨贴', '甘草片', '薄荷叶', '芥末']
从列表中删除元素,可以直接利用del语句删除指定位置的值。同时在这里也可以利用列表 remove([元素])
的方法移除掉列表中的元素
del(list[1])# 将刚刚插入的维生素删除掉
print('修改后的:' ,list)
#修改后的: ['西瓜霜', '云南白药', '万通筋骨贴', '甘草片', '薄荷叶']
list.remove(list[1])
print('修改后的:' ,list)
#修改后的: ['西瓜霜', '万通筋骨贴', '甘草片', '薄荷叶']
若想统计列表中元素出现过的次数,可以利用count([元素])
方法
list = ['西瓜霜','云南白药','万通筋骨贴','甘草片','薄荷叶','西瓜霜','万通筋骨贴' ]
print('出现的次数为:' ,list.count('西瓜霜'))
# 2
列表的反转,若想让列表反着排列,可以利用list.reverse()
方法
print('原来的列表为:' ,list)
list.reverse()
print( '现在的列表为:' ,list)
# 原来的列表为: ['西瓜霜', '云南白药', '万通筋骨贴', '甘草片', '薄荷叶', '西瓜霜', '万通筋骨贴']
# 现在的列表为: ['万通筋骨贴', '西瓜霜', '薄荷叶', '甘草片', '万通筋骨贴', '云南白药', '西瓜霜']
列表的内部排序,利用sort(key = None,reverse = False)
方法
list.sort() #默认按照首字母的顺序排序
print(list)
#['万通筋骨贴', '万通筋骨贴', '云南白药', '甘草片', '薄荷叶', '西瓜霜', '西瓜霜']
list1 = [1,3,2,4,0,4]
list1.sort()
print(list1)
# [0, 1, 2, 3, 4, 4]
清空列表内的所有值可以利用列表的clear( [列表名] )
list.clear()
print(list)
#这里做了清空 ,所以输出结果为空列表 []
复制列表内的元素利用列表的copy( [ 列表名] )
方法
list = list1.copy() #我们对list做了清空,现在复制list1的值,所以现在list的值等于list1的值
print(list)
# [0, 1, 2, 3, 4, 4]
实训内容
1、(1)给定两个列表:ls1=[2,1,4,3]和ls2=[‘c’,’a’,’b’],按顺序执行以下语句,输出执行对应方法后的ls1和ls2。
1)ls1.remove(2)
2)ls1.sort()
3)ls1.append([ls2.index(‘b’)])
4)ls2.pop(ls1.pop(2))
5)ls2.insert(s1[0],’d’)
(2)有列表ls=[1,2,‘a’,‘b’,‘hello’], 分别执行ls1=ls.append([3,4])、ls2=ls+[5,6]、ls2+=[7,8],并通过id()函数查看每一步执行的列表的内存首地址,type()函数查看ls1的类型;观察输出结果,指明append()、+、+=操作哪种属于列表的原地操作,哪种属于创建新的列表。
通过观察列表的id值和type,如果id相等就是列表的原地操作,如果列表的id发生了变换,就代表在内存中列表的值变化过
(3)分别使用内置函数sorted()和列表类型的sort()方法对列表stuScore进行排序,使其按照分数从高到低排序。
列表为:
stuScore=[(“stu1”,“A”,95),(“stu2”,“B”,82),(“stu3”,“D”,66),(“stu4”,“B”,82),(“stu5”,“A”,99),(“stu6”,“C”,78)]
排序后结果为:
[(‘stu5’, ‘A’, 99), (‘stu1’, ‘A’, 95), (‘stu2’, ‘B’, 82), (‘stu4’, ‘B’, 82), (‘stu6’, ‘C’, 78), (‘stu3’, ‘D’, 66)]
2.首字母缩略词是一个单词,是从短语中的单词取第一个字母形成的。例如,RAM是“random access memory”的缩写。
3.编写一个函数,能够生成n个随机小数,然后测试代码,生成并输出用户指定个数的随机小数。随机密码生成。
4.键盘输入一组实数,存放于列表之中。求这组数据的最大值、最小值、平均数、中位数。
5.列表推导式练习
列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。
语法:[表达式 for 变量 in 序列或者可迭代对象 ]
[(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y] #等价形式是什么?
(1)matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] , [[row[i] for row in matrix] for i in range(4)]的等价形式是什么?
(2)请用列表推导式完成:给定列表[1,9,8,7,6,5,13,3,2,1],删除其中所有奇数后再输出。
(3)请用列表推导式完成:将由1、2、3、4这4个数字组成的每位数都不相同的所有三位数字存入列表中并输出该列表。
# (3)分别使用内置函数sorted()和列表类型的sort()方法对列表stuScore进行排序,使其按照分数从高到低排序。
#
# 列表为:
# stuScore=[("stu1","A",95),("stu2","B",82),("stu3","D",66),("stu4","B",82),("stu5","A",99),("stu6","C",78)]
# 排序后结果为:
# [('stu5', 'A', 99), ('stu1', 'A', 95), ('stu2', 'B', 82), ('stu4', 'B', 82), ('stu6', 'C', 78), ('stu3', 'D', 66)]
stuScore=[("stu1","A",95),("stu2","B",82),("stu3","D",66),("stu4","B",82),("stu5","A",99),("stu6","C",78)]
print(sorted(stuScore,key=lambda student:student[2],reverse=True)) #这里利用学生按照分数排序
# 2.首字母缩略词是一个单词,是从短语中的单词取第一个字母形成的。
s=input("请输入:")
n=s.split()
for i in range(len(n)):
print((n[i][0]).upper(),end='')
# 2、编写一个函数,能够生成n个随机小数,然后测试代码,生成并输出用户指定个数的随机小数。
# 这里提供两种解决方法
# 第一种
import random
import string
def randCode():
c=string.ascii_letters+string.digits
ls=[]
for i in range(8):
ls.append(random.choice(c))
return ls
def main():
n=input("请输入要产生的随机密码的个数:")
for i in range(int(n)):
print(randCode())
main()
input()
# 第二种
import random
import string
def randCode():
c = string.ascii_letters + string.digits
ls = []
s = ''
for i in range(8):
# s+=random.choice(c)
s += c[random.randint(0, len(c) - 1)]
ls.append(s)
return ls
def main():
n = input("请输入要产生的随机密码的个数:")
ls = []
for i in range(int(n)):
ls += randCode()
print(ls)
main()
# 3、键盘输入一组实数,存放于列表之中。求这组数据的方差,最大值、最小值、平均数、中位数。
from math import sqrt
def getNum():
ls=[]
num=eval(input("请输入一组数据(以逗号分隔):"))
ls=list(num)
return ls
def mean(ls):#求平均值
total=0.0
for item in ls:
total+=item
return total/len(ls)
def Sdev(ls,mean_ls):#求方差
sdev=0
for item in ls:
sdev+=pow(item-mean_ls,2)
return sqrt(sdev/(len(ls)-1))
def mid(ls):#求中位数
ls.sort()
if len(ls)%2!=0:
mid=ls[len(ls)//2]
else:
mid=(ls[len(ls)//2]+ls[len(ls)//2-1])/2
return mid
def test():
lis=getNum()
m=mean(lis)
s=Sdev(lis,m)
d=mid(lis)
print("平均数:{},方差:{:.2f},中位数:{}".format(m,s,d))
# 4、列表推导式练习
list1=[1,9,8,7,6,5,13,3,2,1]
print("列表:",list1)
list1=[i for i in list1 if i%2==0]
print("删除其中所有奇数:",list1)
digits=(1,2,3,4)
a=[i*100+j*10+k for i in digits for j in digits for k in digits \
if i!=j and j!=k and i!=k]
print(a)