2

実際に 3 つの例を示します。

>>> result = []
>>> for k in range(10):
>>>    result += k*k

>>> result = []
>>> for k in range(10):
>>>    result.append(k*k)

>>> result = [k*k for k in range(10)]

最初のものはエラーになります。以下のようなエラー出力

TypeError: 'int' object is not iterable

ただし、2番目と3番目はうまく機能します。

これらの 3 つのステートメントの違いを理解できませんでした。

4

4 に答える 4

8

リスト オブジェクトへのインプレース追加は、イテラブルの要素でリストを拡張します。k*k反復可能ではないため、リストに実際に「追加」することはできません。

イテラブルにする必要がありますk*k

result += [k*k]
于 2013-07-15T01:27:44.533 に答える
4

resultリスト オブジェクトです (最初はエントリがありません)。

リストの演算子は、基本的に、右側にあるもので+=そのメソッドを呼び出すのと同じです。extend(ここでは関係のない微妙な違いがいくつかありますが、詳細についてはpython2 プログラミング FAQを参照してください。)extendリストのメソッドは (単一の) 引数を反復しようとしますが、反復可能でintはありません。

(一方、もちろん、appendメソッドはその (単一の) 引数を追加するだけなので、問題なく動作します。リスト内包表記は内部的にはまったく異なり、リストの構築が内部的な騒ぎをはるかに少なくして行われるため、最も効率的な方法です。 )

于 2013-07-15T01:34:53.390 に答える
0

文字列やシーケンスではなく、整数を反復処理しています。の場合result += k*k、k が文字列/シーケンス入力である場合にのみ true になりますが、k が数値の場合、結果は連続した合計になります。の場合result.append(k*k)、k が文字列であるか数値であるかにかかわらず、結果は順次加算されます。

于 2015-04-26T15:48:52.987 に答える