1. ホーム
  2. python

[解決済み] ValueError: 解凍するために0個以上の値が必要(pythonのリスト)

2022-02-02 21:59:12

質問

Google code classでpythonを学習しています。練習問題を試しているところです。

def front_x(words):
  x_list, ord_list = []
  for word in words:
    if word[0] == 'x':
      x_list.append(word)
    else:
      ord_list.append(word)
  return sorted(x_list) + sorted(ord_list)      

1行で2つの空リストを初期化しているため、エラーが発生するのだと思います。別々の行で初期化すれば、もうエラーは発生しません。これが原因でしょうか?

解決方法を教えてください。

タプルアサインを使おうとしているのですね。

x_list, ord_list = []

というのは、おそらく多重代入を意味しているのでしょう。

x_list = ord_list = []

は期待通りの働きをしてくれませんので、代わりに次のものを使ってください。

x_list, ord_list = [], []

または、まだ最高です。

x_list = []
ord_list = []

カンマで区切られた変数名のリストを使うとき、Pythonは右辺に数変数にマッチする一連の式があることを期待します; 以下のものも合法でしょう。

two_lists = ([], [])
x_list, ord_list = two_lists

これをタプルのアンパッキングといいます。一方、複数の代入を行うために 1 空のリスト・リテラル ( x_list = ord_list = [] の両方が必要です。 x_listord_list を指していることになります。 同じ のリストが作成され、一方の変数で行われた変更はもう一方の変数で見ることができます。

>>> x_list = ord_list = []
>>> x_list.append(1)
>>> x_list
[1]
>>> ord_list
[1]

より明確にするために、2つの セパレート を代入し、それぞれの変数に独自の空リストを与えています。