python - 如何解决基于实施的问题的索引超出范围错误
问题描述
我正在练习 python 3 问题,但我被困在一个问题上。
小彼佳非常喜欢礼物。最近,他从母亲那里收到了一台新笔记本电脑作为新年礼物。他立即决定送给别人,因为这比送礼物更令人愉快。这一次,他在他家组织了一个新年晚会,并邀请了他的n个朋友。
如果说 Petya 更喜欢接受礼物的一件事,那就是看别人送礼物给别人。于是,他把笔记本电脑安全地藏到了下一个新年,并决定在不参与的过程中,看着朋友们交换礼物。他用从 1 到 n 的整数给他所有的朋友编号。Petya 记得我的一个朋友号码给了一个朋友号码 pi 的礼物。他还记得他的每个朋友都收到了一份礼物。
现在,Petya 想为每个朋友知道送他礼物的朋友的号码。
输入
第一行包含一个整数 n (1 ≤ n ≤ 100) — Petya 邀请参加聚会的朋友的数量。
第二行包含 n 个空格分隔的整数:第 i 个数字是 pi — 给第 i 个朋友送礼的朋友的编号。保证每位朋友都收到一份礼物。有些朋友可能不同意 Petya 给别人送礼物的想法。那些朋友把礼物送给了自己。
输出
打印 n 个空格分隔的整数:第 i 个数字应该等于给第 i 个朋友送礼物的朋友的编号。
代码:
n=int(input())
gifts=input().split()
""" Reverse_gifts is just dummy list so that I can place each integer at
its required place"""
reverse_gifts=[range(n)]
""" For converting each item of gifts to integer"""
for num in range(len(gifts)):
gifts[num]=int(gifts[num])
""" It will change the items of reverse_gifts to the items we need in
output"""
for num1 in range(1,n+1):
guest_recieved_gift=gifts.index(num1)
reverse_gifts[num1-1]=guest_recieved_gift+1
print(reverse_gifts)
"""For converting each item of reverse gifts to string"""
for num2 in range(len(gifts)):
reverse_gifts[num2]=str(reverse_gifts[num2])
""" For converting final list into string and print it"""
final_gifts=" ".join(reverse_gifts)
print(final_gifts)
输入:
4
2 3 4 1
输出:回溯(最近一次调用最后一次):
File "Presents.py", line 11, in <module>
reverse_gifts[num1-1]=guest_recieved_gift+1
IndexError: list assignment index out of range
解决方案
问题是您使用reverse_gifts=[range(n)]
的长度为 1,因为目前它只包含一个生成器。因此,您最终会得到一个,IndexError
因为您试图访问大于 0 的索引。您可以解压缩range
生成器的值以使用包含 4 个元素的列表*
reverse_gifts=[*range(n)]
另一种方法是
reverse_gifts= list(range(n))
完整答案
n=4
gifts="2 3 4 1".split()
reverse_gifts=[*range(n)]
for num in range(len(gifts)):
gifts[num]=int(gifts[num])
for num1 in range(1,n+1):
guest_recieved_gift=gifts.index(num1)
reverse_gifts[num1-1]=guest_recieved_gift+1
print(reverse_gifts)
# [4, 1, 2, 3]
for num2 in range(len(gifts)):
reverse_gifts[num2]=str(reverse_gifts[num2])
final_gifts=" ".join(reverse_gifts)
print(final_gifts)
# 4 1 2 3
推荐阅读
- java - 使用来自 h2 数据库的数据通过 Junit 测试模拟获取请求
- python - 在python中使用决胜局对二维数组中的值进行顺序排序
- swift - 如何在swift ui中使用autoid将带有字段的新文档添加到firebase集合
- php - PHP中的数字格式(金钱)
- php - 如何在没有 gulp 和 laravel-elixir 的情况下编译 sass [修复]
- r - 创建具有平均丰度的堆叠条形图
- java - 从给定的字符串中获取总和
- sql - 需要澄清 SQL 代码以检索与员工 ID 一起显示的连续月份的销售计数
- jquery - Laravel 6 使用 jquery 翻译成 ajax 响应
- oauth - Oauth 刷新令牌