我在这里有这个功能:
def swap_cards(deck, index_deck):
swap_deck = []
after_index = []
bandf_index = []
if index_deck >= len(deck):
for i in range(0, len(deck) + 1):
if deck[i] == index_deck:
after_index += [deck[0]]
else:
bandf_index += [deck[i]]
swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index
每次我尝试输入一个大于或等于套牌长度的索引时,我都会得到错误'list index out of range'
示例:
swap_cards([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9)
我希望[9, 1, 2, 3, 4, 5, 6, 7, 8, 0]
,但我会将'列表索引超出范围'。
切换最后一个和第一个数字,我不知道我做错了什么。
答案 0 :(得分:1)
你有len()的问题。假设您的index_deck为9,如上例所示:
if index_deck >= len(deck):
for i in range(0, len(deck) + 1):
此范围将产生[0,1,2,3,4,5,6,7,8,9,10,11]
if deck[i] == index_deck:
after_index += [deck[0]]
由于数组索引从零开始,上面的行将生成错误。甲板[10]和甲板[11]不存在。
else:
bandf_index += [deck[i]]
修复上述len()
语句也会解决此问题(如果if
语句为false,您可能会尝试访问deck [10]。
swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index
最后一件事:您验证if index_deck >= len(deck):
。这将在deck[index_check]
处打破上述行,因为在这里您将始终访问不存在的索引。