2017-02-02 9 views
2

に私は、Python 3.6とパンダ0.19.2時点を実行すると、以下のようにリストの名前をアクセスしたいのですが物事をしてから印刷してください。「私はリスト1で作業を終えました。しかし:私は自分のコードを実行すると、私は次のエラーを取得する:アクセスリストの名前Pythonのprint文

TypeError: must be str, not list 

これは、(リストは、すべての後の文字列ではありません)完璧な理にかなっているが、私は私のリストの名前を取得することができます方法はありあります文字列( 'list1')として?私は代わりにdictを使うことができます(これは私が今やっていることですが)、それでも私は興味があります。

+4

いいえ、あなたはdictを使用する必要があります。変数は、Pythonのオブジェクト用の付箋タグと似ていて、文字列としてそれらを生成しようとする理由はあまりありません。出来ますか?おそらく、ある程度、 'locals()'を調べることによって。 – miradulo

+2

いいえ、 'list'という名前(あなたが使うべきではない、' list'という名前の関数)は、ループの最初の繰り返しで 'list1'という名前と同じ値にマップされますが、関係はありません'list'と' list1'の間にあります –

+1

オブジェクトはその名前についての知識がなく、さまざまなスコープで多くの異なる名前を持つ可能性があります。 'globals()'や 'locals()'を使って、 'is'を使って各値をあなたのオブジェクトと比較して奇妙な検索をすることもできますが、これは多くの状況で失敗する可能性のある回避策です。 –

答えて

2

であるが、これは辞書が十分でオーバーヘッドがたくさんあります。

class NamedObject: 
    def __init__(self, name, obj): 
     self.name = name 
     self.obj = obj 

    def __getattr__(self, attr): 
     if attr == 'name': 
      return self.name 
     else: 
      return getattr(self.obj, attr) 


unnamed_list = [1, 2, 3] 
named_list = NamedObject('named_list', unnamed_list) 

print(named_list) # [1, 2, 3] 
print(named_list.name) # 'named_list' 
+0

その場合、私は辞書に固執します。しかし、助けてくれてありがとう! – MRR

-4

は多くのオプションがあり、そのうちの一つは、のreprは、あなたが一般的に名前をカプセル化するクラスを作成することができます(リスト)

+0

これはオブジェクトの文字列化された値を与えるだけではありませんか? – Carcigenicate

+0

はい、私は彼/彼女がリストを印刷したいと思っていた質問から –

+0

@HumbertoPinheiroいいえ、OPは_variable name_のリストを印刷したいと思っています。 – miradulo