因为本人是中职生,马上就要考试了,所以我更新文章不间断,感谢各位粉丝的支持,希望我的文章能帮助到你你
先看题目
这道题目不是很难,我不小心掉坑了,我解释一下题目是个什么意思:
第一行就是输入一共有几个数,也就是题目所说的大小
剩下的两行就是给你两组数,上面的就是一组数,下面的数是一组索引,用于删除上面的数
接下来我会给大家看我的正确和错误的做法
正确做法:
n = int(input())
ls = [int(i) for i in input().split()]
ls_delete = [int(i) for i in input().split()]
s = []
for i in ls_delete:
# 由于列表索引从0开始,所以需要减去1
index = i - 1
# 移除元素并添加到s列表中
s.append(ls.pop(index))
# 输出被移除的元素,由于是逆序添加到s列表中的,所以直接输出s列表
print(*s)
其实看到这里你拿我的这个代码去复制到蓝桥oj就可以过了,现在我讲一下我是怎么错的(如果你感兴趣看的话,你需要有一定的基础,不然可能跟不上我的表达意思)
错误做法:
n=int(input())
ls=[int(i) for i in input().split()]
ls_delete=[int(i) for i in input().split()]
s=[]
for i in range(n):
if ls_delete[i]<len(ls):
x=ls.pop(ls_delete[i])
s.append(x)
else:
index=ls_delete[i]-len(ls)
x=ls.pop(index)
s.append(x)
print(*s[::-1])
1、首先先获得n,这个时候通过列表推导式继续获得两组数(题目中的两组数,ls是一组数,ls_delete是要删除的索引,并且新建一个列表s)
2、然后根据n的大小进行相应的循环,如果删除的索引小于ls的长度(这是因为每次删除ls的元素,ls的长度都会减少,万一索引的值大于ls的长度会报错) ,那么在ls中把索引值给删掉,并且在s中添加这个删掉的值,这步考虑到最后输出要倒着输出所以我建了一个列表
3、如果索引的值大于ls的长度,那么就先把索引值减去ls的长度并赋值给index,然后在ls中删除index(也就是要删除的索引),然后也添加到s中
4、最后反转打印输出,*是用于去掉两边的方括号(当然官方解释不是这样,我只是图方便)
这个例子能达到题目要求的效果可以检测不过,为什么呢?因为我题目看错了,我删除的索引是编程语言的索引(从0开始),我以为只要根据下面列表的索引删除上面对应的数,题目实际要求删除的是位置(现实中从1开始数的)!不是索引,所以逻辑上没问题,但是出了这种小毛病。