2011-09-21 15 views
10

Pythonでextendがどのように機能するのかを理解しようとしています。例えば:Pythonのリストを使ったExtendの予期しない動作

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6].extend(a) 
>>> b 
>>> 

しかし、私は期待しているでしょう:

[4, 5, 6, 1, 2, 3] 

はなぜNoneを返さない代わりのリストを拡張することですか?

+5

あなたは 'b = [4、5、6] + a'が何を期待しましたか? –

答えて

22

extend()方法は、既存のアレイに追加し、Noneを返します。あなたの場合は、アレイ上に[4, 5, 6]という配列を作成し、拡張してからそれを破棄します。変数bは、戻り値Noneで終了します。

+0

ありがとう、それは完璧な意味があります。 – TimothyAWiseman

6

listのメソッドは大部分がインプレースで動作し、Noneを返します。

>>> a = [1, 2, 3] 
>>> b = [4, 5, 6] 
>>> b.extend(a) 
>>> b 
[4, 5, 6, 1, 2, 3] 
3

extendは、そのオペランドを拡張しますが、値を返しません。完了している場合:

b = [4, 5, 6] 
b.extend(a) 

次に、期待した結果が得られます。

2

他の人は、多くの場合listメソッドを指摘しました。特に、リストを変更するメソッドは、リストへの参照ではなくNoneを返します。 理由これは、リストのコピーが作成されたかどうかを混乱させないようにするためです。 a = b.extend([4, 5, 6])と書くことができる場合はabと同じリストへの参照ですか?声明でbを修正しましたか?このようなステートメントは、変更されたリストの代わりにNoneを返すことで無駄になります。aには、あなたが思ったことがなく、代わりにb.extend(...)と書くことを学びます。したがって、明瞭さの欠如が除去される。

1

私はこの問題を抱えていましたが、他の回答が正しい説明を提供していましたが、私が気に入った解決策や回避策はここにはありません。加算演算子を使用すると、リストを連結して結果を返すことになります。私の場合は、colorを3桁のリストに、opacityを浮動小数点として簿記していましたが、ライブラリは色を不透明度が4桁の4桁のリストとして必要としました。私は使い捨ての変数に名前を付けたくなかったので、この構文は私のニーズに合った:

color = [1, 1, 0] 
opacity = 0.75 
plot.setColor(color + [opacity]) 

は、これは連結後その場で不透明度と、新しいリストのための新しいリストを作成し、それは私の目的のために罰金です。私はちょうど浮動小数点でリストを拡張し、元のリストや浮動小数点に影響を与えずに結果のリストを返すコンパクトな構文が欲しかった。

関連する問題