1

我在编写代码时遇到错误

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

我的问题是,为什么会出现这个错误,我应该如何解决这个问题?

4

1 回答 1

3

在 Python 中,即使变量包含一个列表,也应该像index = []. 当你使用[index] = []Python 时认为你想将列表的第一项分配给你的变量。同样,当你使用代码时[first, last] = [1,2],变量first被赋值为 1,变量last被赋值为 2。这称为解包。

此外,在 中[index].append(2),您不应在变量名周围使用方括号。这不会引发任何错误,但它会创建一个新列表(唯一的项目是 的值index),然后在该行执行时销毁该列表。

您的代码应如下所示(假设您的代码的其他部分是正确的)。此外,正如这条评论所建议的,使用c而不是c != []因为空列表是错误的并且它遵循 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 需要一个整数并且代码正在给它一个列表。

但是,由于 OPindex在代码中的使用,我认为他的意思是使用 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)
于 2015-04-12T01:32:50.580 回答