Python 3.8: 使用 append() 时出现 IndexError
Python 3.8: IndexError when using append()
我做了一点 "console" 将命令与 split()
分开。我将 "command"(input()
中的第一个 "word")与第一个词之后的 "arguments" 分开。这是生成错误的代码:
cmdCompl = input(prompt).strip().split()
cmdRaw = cmdCompl[0]
args = addArgsToList(cmdCompl)
addArgsToList()
函数:
def addArgsToList(lst=[]):
newList = []
for i in range(len(lst)):
newList.append(lst[i+1])
return newList
我尝试将 cmdRaw
之后的每个单词添加到 addArgsToList()
返回的名为 args
的列表中。但我得到的是:
Welcome to the test console!
Type help or ? for a list of commands
testconsole >>> help
Traceback (most recent call last):
File "testconsole.py", line 25, in <module>
args = addArgsToList(cmdCompl)
File "testconsole.py", line 15, in addArgsToList
newList.append(lst[i+1])
IndexError: list index out of range
我不明白为什么我会得到一个 IndexError
,因为据我所知,newList
可以动态分配。
有什么帮助吗?
当你在做的时候:
for i in range(len(lst)):
newList.append(lst[i+1])
最后一次迭代尝试在超出范围的 len(lst)
处访问 lst
。
你应该这样做:
如果您希望避免追加第一个元素
def addArgsToList(lst=[]):
newList = []
for i in range(1,len(lst)):
newList.append(lst[i])
return newList
如果您只是想复制新列表中的元素,请执行以下操作:
newList = lst[1:].copy()
我做了一点 "console" 将命令与 split()
分开。我将 "command"(input()
中的第一个 "word")与第一个词之后的 "arguments" 分开。这是生成错误的代码:
cmdCompl = input(prompt).strip().split()
cmdRaw = cmdCompl[0]
args = addArgsToList(cmdCompl)
addArgsToList()
函数:
def addArgsToList(lst=[]):
newList = []
for i in range(len(lst)):
newList.append(lst[i+1])
return newList
我尝试将 cmdRaw
之后的每个单词添加到 addArgsToList()
返回的名为 args
的列表中。但我得到的是:
Welcome to the test console!
Type help or ? for a list of commands
testconsole >>> help
Traceback (most recent call last):
File "testconsole.py", line 25, in <module>
args = addArgsToList(cmdCompl)
File "testconsole.py", line 15, in addArgsToList
newList.append(lst[i+1])
IndexError: list index out of range
我不明白为什么我会得到一个 IndexError
,因为据我所知,newList
可以动态分配。
有什么帮助吗?
当你在做的时候:
for i in range(len(lst)):
newList.append(lst[i+1])
最后一次迭代尝试在超出范围的 len(lst)
处访问 lst
。
你应该这样做:
如果您希望避免追加第一个元素
def addArgsToList(lst=[]):
newList = []
for i in range(1,len(lst)):
newList.append(lst[i])
return newList
如果您只是想复制新列表中的元素,请执行以下操作:
newList = lst[1:].copy()