列表,元组,字典学习笔记3

本文介绍了Python中列表、元组和字典的应用场景及操作技巧,包括列表的赋值、推导式、二维矩阵转置、元素删除等,并通过实例提供了多种操作方法,如在列表中插入元素、按条件生成新列表、元组排序等,适合Python初学者学习。

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

适用场合

列表:可以顺序的存数据
元组:不能改的用它
字典:key和value,键值对
练习1:
a = [-1,2,3,-3,0,-5,5]
生成一个新列表,-1的左边都是小于它的,右边都是大于它的。不需要有序

a = [-1,2,3,-3,0,-5,5]
base = a[0]
a1 = []
a2 = []
for i in a[1:]:
    if i<=base:
        a1.append(i)
    else:
        a2.append(i)

print(a1+[base]+a2)

在这里插入图片描述
a = [-1,2,3,-3,0,-5,5]将列表元素倒序输出:

 for i in range(len(a)-1,-1,-1):
     print(a[i])

按坐标倒序取,len(a)-1取最后一个元素坐标,第二个-1因为range的右边是开区间,如果是0就取不到第一个坐标值,第三个-1表示步长按倒序。
在这里插入图片描述
在列表a = [-1,2,3,-3,0,-5,5]中实现每个元素+1,需要在原列表实现。

a = [-1,2,3,-3,0,-5,5]
for i in range(len(a)):
    a[i]+=1

print(a)

在这里插入图片描述
1、在列表中插入一个新的元素
[100,2,3,-3,0,-5,5]在0的前面插入一个元素10000
算法:
遍历,判断是否是0,不是0,把元素插入新列表
是0,则把待插入元素插入新列表,然后再插入0

result = []
a = [100,2,3,-3,0,-5,5]
target_num = 10000
for i in a:
    if i == 0:
        result.append(target_num)
        result.append(i)
    else:
        result.append(i)

print(result)

在这里插入图片描述
2、在列表中的第三个位置插入10000
算法:
使用切片把第三个位置前的取到
使用切片把位置三后的取到
把10000存到列表,三个列表相加

result = []
a = [100,2,3,-3,0,-5,5]
target_num = 10000
result = a[:2]+[target_num]+a[2:]
print(result)

在这里插入图片描述
练习:
[1,-1,2,-2,3,-3] max()排序
算法:
每次找到最大的存到新的list
在老的list里面删掉一个
继续重复上面的过程,知道所有的元素都到新list
1、降序

a = [1,-1,2,-2,3,-3]
result = []
for i in range(len(a)):
    result.append(max(a))
    a.remove(max(a))

print(result)

在这里插入图片描述
2、升序

a = [1,-1,2,-2,3,-3]
result = []
for i in range(len(a)):
    result.insert(0,max(a))
    a.remove(max(a))

print(result)

在这里插入图片描述
a = “abcdefghi”
把开头、结尾、中间位置的字母变为1,其他字母不变

a = "abcdefghi"
a = list(a)
a[0] = '1'
a[-1] = '1'
mid = len(a)//2
if len(a)%2 == 0:
    a[mid] = '1'
    a[mid-1] = '1'
else:
    a[mid] = '1'

print("".join(a))

在这里插入图片描述
按照序列的长度倒序排序

a = [(1,),(1,1),(1,2,3),(2,2)]
def func(b):
    return len(b)

a.sort(key = func)
print(a)

在这里插入图片描述
降序用reverse=True

a = [(1,),(1,1),(1,2,3),(2,2)]
def func(b):
    return len(b)

a.sort(key = func,reverse = True)
print(a)

在这里插入图片描述
使用元组的第一个值大小实现列表排序
a = [(-1,),(1,1),(-2,2,3),(2,2)]

a = [(-1,),(1,1),(-2,2,3),(2,2)]
def func(b):    
    return b[0]

a.sort(key = func)
print(a)

在这里插入图片描述
请使用元组中的所有元素的和,对下面列表的元素进行排序。

a = [(-1,),(1,1),(-2,2,3),(2,2)]
def func(b):    
    return sum(b)

a.sort(key = func)
print(a)

在这里插入图片描述
找到英文句子中字母最长的单词。
算法1:
1 使用空格分割列表
2 遍历列表的每个单词
3 max_length = 0
4 max_word = “”

s = "I am a boy! hi , glory road hello"
word_list = s.split()
max_length = 0
max_word = []
for word in word_list:
    if len(word)>max_length:
        max_length = len(word)
        max_word = [word]
    elif len(word) == max_length:
        max_word.append(word)

print(max_word)

在这里插入图片描述
算法2:
1 使用空格分割列表
2 写一个函数,算出每个单词的长度
3 使用sort基于每个单词的长度进行排序
4 切片取最后一个

s = "I am a boy! hi , glory road hello"
word_list = s.split()
word_list.sort(key = lambda x:len(x))
for word in word_list:
    if len(word) == len(word_list[-1]): 
        print(word)

在这里插入图片描述

列表的赋值有两种方式:

引用赋值----他们的内存地址是相同的,修改任何一个list,另一个list中的值都会被改变。
在这里插入图片描述
非引用赋值----
他们的内存地址不一样,所以修改任何一个list都不会影响两一个list。(切片赋值)
在这里插入图片描述
小练习:
生成一个学生资料库:
每个学生:名字 班级 考试成绩(科目名称,成绩)
[名字 班级 考试成绩 [科目名称1,成绩]… ]
请实现一个学生信息和成绩的录入,以及查询以及更新和删除。

提示:每一个操作写一个函数,例如:add_info()当用户输入add_info的时候,调用此函数。在函数内部,再实现用户输入名字和班级。

print("欢迎来到熊孩子成绩管理系统!")

print("""
可操作的命令如下:
add_info: 可以添加学生的名字和班级
add_grade: 可以增加学生的考试成绩
modify_grade: 可以修改学生的考试成绩
get_grade: 可以获得学生的某个学科考试成绩
delete_grade: 可以删除学生的某个学科考试成绩
""")

xionghaizi_info = []

def add_info(info):
    if len(info) > 0:
        print("信息已存在!")
        return
    name = input("请输入学生的名字:")
    info.append(name)
    class_info = input("请输入学生的班级:")
    info.append(class_info)

def add_grade(info):
    if len(info) >= 3:
        subject = input("请输入学生的考试科目:")
        for i in info[2:]:
            if i[0] == subject:
                print("此学科成绩已存在!")
                return
        else:
            grade = input("请输入学生此科目的考试成绩:")
            info.append([subject,grade])
    else:
        subject = input("请输入学生的考试科目:")
        grade = input("请输入学生此科目的考试成绩:")
        info.append([subject,grade])

def modify_grade(info):
    if len(info) >= 3:
        subject = input("请输入要修改的学生考试科目:")
        for i in info[2:]:
            if i[0] == subject:
                grade = input("请输入学生此科目的更改后考试成绩:")
                i[1] = grade
                return
        else:
            print("此学科的成绩不存在,无法修改!")
    else:
        print("此学生没有成绩,无需修改!")

def get_grade(info):
    if len(info) >= 3:
        subject = input("请输入要查询的学生考试科目:")
        for i in info[2:]:
            if i[0] == subject:
                print(i[1])
                return
        else:
            print("此学生无此科目成绩,无法查询!")
    else:
        print("此学生无此科目成绩,无法查询!")

def del_grade(info):
    if len(info) >= 3:
        subject = input("请输入要删除的学生考试科目:")
        for i in info[2:]:
            if i[0] == subject:
                info.remove(i)
                return
        else:
            print("此学生无此科目成绩,无法删除!")
    else:
        print("此学生无成绩可以删除!")

print("请初始化学生信息:")
add_info(xionghaizi_info)

while 1:
    command = input("请输入你的命令:")
    if command == ".":
        print("bye!")
        break
    elif command == "add_info":
        add_info(xionghaizi_info)

    elif command == "add_grade":
        add_grade(xionghaizi_info)

    elif command == "modify_grade":
        modify_grade(xionghaizi_info)

    elif command == "get_grade":
        get_grade(xionghaizi_info)

    elif command == "del_grade":
        del_grade(xionghaizi_info)

在这里插入图片描述

推导列表

练习:生成10–30的整数

 [int(x+y) for x in ["1","2","3"] for y in map(str,range(10)) if int(x+y)<=30]

在这里插入图片描述
练习:把一个字典中所有的数字key进行求和,一行代码解决
算法:
1 遍历key
2 if 判断是否是数字
3 放到推导列表里面
4 sum求和

sum([k for k in {1:'a',2:"b","a":3} if isinstance(k,(int,float))])
 

在这里插入图片描述
所有的key和value为数字的全部求和,一行搞定

sum([k for k in {1:'a',2:"b","a":3} if isinstance(k,(int,float))] + [v for v
 in {1:'a',2:'b',"a":3} if isinstance(v,(int,float))])

在这里插入图片描述

二维矩阵的转置:

a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

[ [j[i] for j in a] for i in range(3)]

在这里插入图片描述
for i in range(3):因为有3列,所以遍历3次
for j in a:遍历每一行
当i = 0时:[j[i] for j in a]表示获取每行的第1列,放到列表中
当i = 1时:[j[i] for j in a]表示获取每行的第2列,放到列表中
当i = 2时:[j[i] for j in a]表示获取每行的第3列,放到列表中

删除二维列表的某一列

a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
print ([[i[j] for j in [1,2]]for i in a])

在这里插入图片描述
for i in a:遍历列表的每一行
for j in [1,2]:遍历列表的第二列和第三列
i分别取1,2代表列表的第二列和第三列
[[i[j] for j in [1,2]]:表示每一行的第二列和第三列元素,存到子列表中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值