2013-07-22 4 views
5

にサブリストの要素を追加し、私は形式のリストのリストを持っている:方法のpython

list = [[3, 1], [3, 2], [3, 3]] 

そして、私は二つのリスト、各サブリストのxの値を持つ1つずつに分割したいです各サブリストのy値と比較します。

私は現在、この持っている:

x = y = [] 
for sublist in list: 
    x.append(sublist[0]) 
    y.append(sublist[1]) 

をしかし、それはこれを返し、なぜ私にはわからない:あなたはx = y = []を言うとき

x = [3, 1, 3, 2, 3, 3] 
y = [3, 1, 3, 2, 3, 3] 

答えて

10

x = y = []を実行すると、xyが作成され、それらが同じリストに参照されるため、誤った出力が表示されます。 (オブジェクトIDは下に同じです)

>>> x = y = [] 
>>> id(x) 
43842656 
>>> id(y) 
43842656 

これを修正すると正しい結果が得られます。

>>> x = [] 
>>> y = [] 
>>> for sublist in lst: 
     x.append(sublist[0]) 
     y.append(sublist[1]) 


>>> x 
[3, 3, 3] 
>>> y 
[1, 2, 3] 

これはかなり簡単に行うことができますが、

x,y = zip(*lst)

P.S. - listを変数名として使用しないでください。これは、組み込みのものです。

+4

素敵な使用を。 'list'についての良い点があります。 –

+1

'zip'ソリューションは非常にきちんとしています。 –

4

、あなたがすべきxyを引き起こしていますと同じリストを参照してください。だからあなたが編集すると、もう一方を編集します。参照の仕組みについての良い説明はhereです。

したがって、あなたが

x = []; y = [] 

あなたはまたzipをしようとする場合があります代わりに言うならば、あなたのコードを使用することができます。

lst = [[3, 1], [3, 2], [3, 3]] 
x,y = zip(*lst) 

そしてSukritが言うように、変数名としてlist使用していません(またはintまたはstrまたは何を持っているか)それはPythonビルトインですが(インタプリタをロードしてhelp(list)を入力してください - 何かがポップアップするということはPythonがあらかじめ定義されているということですlistは何かを意味する)Pythonはうれしいことにあなたを再定義させる(a.k.a.影)それ。後であなたのコードを壊す可能性があります。

2

これは、x = y = []のようなxとyを作成すると、xとyが同じリストを指しているからです。あなたがそれら異なるリストにしたい場合は、あなたが1に追加するたびに、xはそれほどリストを指しているのyを指して、あなたが他に追加されている意味x = y = []を設定している

x = [] 
y = [] 
1

のようにそれらを宣言する必要があります。このような何かにコードを変更します。

x = [] 
y = [] 
for sublist in list: 
    x.append(sublist[0]) 
    y.append(sublist[1]) 
0

あなたが行うことができます。id` `の

x = [i[0] for i in list] 
y = [i[1] for i in list]