首页 > 解决方案 > 如何解决基于实施的问题的索引超出范围错误

问题描述

我正在练习 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

标签: pythonpython-3.x

解决方案


问题是您使用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

推荐阅读