题目 1771: [编程入门]链表之节点删除(python)

题目描述

有两个链表a和b,设节点中包含学号、成绩。从a链表中删去b链表中有相同学号的那些节点。

输入格式

第一行有两个用空格隔开的整数n和m,分别表示a和b两个链表中的节点个数。保证n和m均不超过100。
之后的n行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
最后的m行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
a和b两个链表中的节点并不一定按照学号顺序排列。保证a链表中学号各不相同,b链表中学号各不相同。

输出格式

首先输出a链表最终剩下的节点个数k。
在接下来的k行,每行输出两个用空格隔开的整数,分别表示一个学生的学号和成绩。
请注意行尾输出换行。

样例输入

3 3
106 90
104 80
101 85
104 95
106 88
105 87

样例输出

1
101 85

代码实现: 

n, m = map(int, input().split())
lis1 = []
lis2 = []
n_lis = []
z = 0
for i in range(n):
    a, b = map(int, input().split())   # 将学号和成绩分开输入
    lis1.append((a, b))                # 用()将学号成绩按一个元素输入列表lis1
for i in range(m):                    
    c, d = map(int, input().split())
    lis2.append(c)                     # 只将学号输入列表lis2
for i in range(n):                     # 用for循环和if判断找出符合条件的lis1中的元素
    for j in range(m):   
        if lis1[i][0] not in lis2:
            n_lis.append(lis1[i])     # 将符合条件的元素赋予新的列表
            z += 1                    # 计算符合条件的元素个数
            break                     # 跳出本循环进入外层循环
print(z)
n_lis.sort()                          # 用sort函数将其排序
for i in n_lis:                       # 用双层for循环遍历n_lis列表并将元素也遍历输出
    for j in i:
        print(j, end=' ')             

解题思路:

本题要求是剔除列表一中与列表二中元素中的第一个小元素相同的,最后计算输出列表一中剩余的个数和元素。

首先就是给列表一lis1和列表二lis2赋值;但由题意可知lis2中有用的就是学号,那么可以只将学号赋给lis2;

赋完值后,下来就是找符合条件的,这里可用双层for循环加if判断;

外层for循环控制的是lis1,内层for循环控制的是lis2,再嵌套一个if,让lis1的每个元素中的第一个小元素即lis1[n][0]与lis2比较,如果符合条件就将其赋予一个新列表

在这里用的if语句为if x not in m:即如果x不在m中就执行以下语句

本题还要求按顺序输出,就需要用到sort()函数

如果直接输出n_lis列表是不对的,它的格式与题目的要求是不符合的

我们需要先将元素从n_lis中取出,然后再从元素中取出学号和成绩,要注意空格和不换行

在这里我们用end=' '语句,它代表的是不换行,''引号中间的代表的是结尾输出的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⚝ ⚝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值