22

私はGoogleコードクラスから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つの空のリストを初期化したためにエラーがスローされたと思います。それらを別々の行で初期化すると、エラーは発生しなくなります。これが理由ですか?

4

3 に答える 3

38

タプル割り当てを使用しようとしています:

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 = []両方が同じリストを指し、1 つの変数を介して行われた変更は他の変数に表示されます。x_listord_list

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

物事を明確に保ち、​​2 つの別々の割り当てを使用して、各変数に独自の空のリストを与えることをお勧めします。

于 2012-12-15T11:38:36.933 に答える
5

行を変更する

x_list, ord_list = []

to

x_list, ord_list = [], []
于 2012-12-15T11:38:27.230 に答える
0

関数の戻り値の型が、関数で期待される値と一致しません...

関数から返された変数と、期待している変数の数を確認してください

于 2016-09-12T04:50:15.003 に答える