我在编写代码时遇到错误
tmp = c.pop(0) # taking out the first element from the list as the starting point
complete = tmp[0][-1]
print(complete)
while c != []:
complete += tmp[1][-1]
[index] = []
for i, pair in enumerate(c):
if pair[0] == tmp[1]:
[index].append(i)
temp = c.pop(index)
print(complete)
我在[index] == []
部分收到此错误:
Traceback (most recent call last):
ValueError: need more than 0 values to unpack
我的问题是,为什么会出现这个错误,我该如何解决?
答案 0 :(得分:3)
在Python中,即使变量包含列表,也应该将其用作index = []
之类的常规变量。当您使用[index] = []
时,Python认为您希望将列表的第一项分配给您的变量。同样,当您使用代码[first, last] = [1,2]
时,变量first
被赋予1并且变量last
被赋值2.这称为解包。
此外,在[index].append(2)
中,您不应使用变量名称周围的方括号。这不会引起任何错误,但它会做的是创建一个新列表(唯一的项目是index
的值),然后在行执行时销毁列表。
您的代码应该如下所示(假设您的代码的其他部分是正确的)。此外,正如this comment建议的那样,使用c
而不是c != []
,因为空列表为false,它遵循Python约定。 :
tmp = c.pop(0) # taking out the first element from the list as the starting point
complete = tmp[0][-1]
print(complete)
while c: # c != []
complete += tmp[1][-1]
index = [] # [index] = []
for i, pair in enumerate(c):
if pair[0] == tmp[1]:
index.append(i) # [index].append(i)
temp = c.pop(index)
print(complete)
如评论中所述,行temp = c.pop(index)
会出错,因为pop需要一个整数,代码会给它一个列表。
但是,由于OP在代码中使用index
,我认为他的意思是将index用作整数。此外,OP表示使用temp
代替tmp
是错误的。
tmp = c.pop(0) # taking out the first element from the list as the starting point
complete = tmp[0][-1]
print(complete)
while c:
complete += tmp[1][-1]
index = 0
for i, pair in enumerate(c):
if pair[0] == tmp[1]:
index = i
tmp = c.pop(index)
print(complete)