2012-01-01 18 views
3

私は別のリスト(listB)からの変数リスト(listA)を持っています。私が抱えている問題は、listBからの項目が、参照ではなくlistAに渡されているということです。 ListAにその値を入れた後、リストBのオブジェクトにアクセスできますか?例えば別のリストのリスト内の項目を参照するPython

listB = [1,2,3,4,5] 
listA = [listB[0], listB[1]] 
listA[0] = 0 

これは[0,2]にリスタが等しくなり、不変ListBのを残します。 listBを[0,2,3,4,5]に変更したいと思います。

私はもちろんこれに対する解決策を思いつきましたが、その醜いです。これを行うためのエレガントな方法があるのだろうかと思っていました。

+0

できません。コードを嫌にすることを助けたいのであれば、http://codereview.stackexchange.comに投稿してください。誰かがあなたの問題にもっと洗練された解決策を指摘するでしょう。 –

答えて

1

Pythonのすべてが参考になります。これらのステートメントがすべて実行された後、listB[1]listA[1]は、同じオブジェクトであるとなります。 (あなたがid(listB[1])id(listA[1])を呼び出すことにより、確認することができます。

理由をlistA[0]listB[0]が異なっているだけであり、あなたがその場所に異なる基準を置くため。

をあなたの説明から判断すると、あなたはしたくありません。。

    listB内のオブジェクトへの参照を格納し listAは何が欲しいのは、私はあなただけの二つのオプションを持っていると信じてい ビューにlistBある listAです
  • listAへの参照を内部で格納する特別なシーケンスを作成し、呼び出されたときに__getitem__および__setitem__メソッドが参照を実行してlistAにルックアップを実行します。

  • 「シーケンスとインデックス」のようなものを含む特別な参照型を作成します。これらの参考文献をlistAに入れてください。しかし、listBからlistAを変更するには、これらの参照オブジェクトの何らかの種類の「get」と「set」メンバーを呼び出す必要があります。

1

できません。まず第一に、整数は不変であり、C/C++では整数のようには動作しません。あなたは整数へのポインタ/参照を取得して、それを変更することはできません(私はあなたがいつも参照を持つことができますが、通常は単一のオブジェクトへの参照であることを確認してください; x = 1; y = 1; print id(x), id(y); id値は同じでなければなりません。メモリアドレス)。あなたにできることはPythonは、C++とは異なる動作しますので、ListBの中の要素のインデックスを取得し、リストを変更、例えば:

listA = [0, 1] 
listB[listA[0]] = 0 

をしかし、おそらくあなたは、あなたが行うことになっていない何かをしようとしているです。あなたは何を達成しようとしていますか?

+0

私はサイズnのデータ行列を持っており、その行列のすべての可能な2x2サブセットを調べています。次に、その2x2サブセットの4つの値をリストに格納し、その値をチェックします。その2x2サブセットの内容が何であるかに基づいて、サイズnの元のデータ行列を修正する必要があります。 2x2行列が保持する元の行列のインデックスを格納するのは同じことだと思っていましたが、より複雑なデータ型やより洗練されていない解が必要でした。私は私のpythonプログラミングスキルを向上させようとしているので、これを行うpythonian/elegantがあるのだろうかと思っていました。 –

+1

このようなことについては、NumPyやSciPyを使うべきだと思っています。これは正確に作成されたPythonライブラリです。純粋なPythonを使用したい場合は、サブマトリックスのインデックスを覚えてリストの値を変更することをお勧めします。サブマトリクスの値を格納する代わりに、このサブマトリクスの左上隅を格納し、元のテーブルの値を変更するだけで済みます。たぶん、CやC++で短いスニペットを提示することもできますが(真剣に、それを短くしてください)、Pythonでコードを作成することもできます。 – gruszczy

+0

@AmeerOpat、私はあなたがしていることについて本当の明確なアイデアは持っていませんが、既存のものを変更するのではなく、新しいマトリックスを作成することを考えてみることをお勧めします。これは、通常、よりpythonicソリューションを生成します。 (私が上で述べたように、コードレビューに投稿すればより良いフィードバックが利用できます) –

関連する問題