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 = []。Pythonを使用する[index] = []と、リストの最初の項目を変数に割り当てたいと考えます。同様に、コードを使用すると、[first, last] = [1,2]変数firstに 1 が割り当てられ、変数lastに 2 が割り当てられます。これをアンパックと呼びます。

また、[index].append(2)変数名の前後に角括弧を使用しないでください。これによりエラーは発生しませんが、(唯一の項目が の値であるindex) 新しいリストが作成され、行が実行されたときにリストが破棄されます。

コードは次のようになります (コードの他の部分が正しいと仮定します)。また、このコメントが示唆しているように、空のリストは false であり、Python の規則に従っているため、c代わりに使用します。c != []:

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がコードで使用しているため、インデックスを整数として使用するつもりだったと思います。また、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 に答える