1

私が本当に探しているものを説明する最良の方法がわかりません。おそらく、この例が私の問題を説明するのに最適です。

次の文字列 (オブジェクト名) のリストがあります。

mynames = ["A","B","C"]

私のオブジェクト自体は次のように定義されています:

A = "Hello"
B = 12
C = "This is C"

ここで、「mynames」に記載されているオブジェクトのすべての値を含むカンマ区切りの文字列を作成したいと思います。

myresult = "Hallo,12,This is C"

もちろん、次のように手動で行うこともできます。

",".join([A,str(B),C])

しかし、「,」.join(mynames) のようなリスト「mynames」に基づいて結果を作成する方法はありますか??

ありがとう、

/j

4

3 に答える 3

4

明白な答えは、globals()またはlocals()を次のように使用することです。

lst = [globals()[x] for x in 'A', 'B', 'C']

正しいものは

 don't do that

Pythonで変数名を操作しようとするたびに、間違ったことをしていることになります。dictなどの適切なデータ構造を使用します。

于 2012-10-11T08:43:49.677 に答える
2

他の回答で述べたように、eval、literal-eval、global、locals、またはその他のナンセンスを使用してタスクを完了することができますが、アプローチは間違っています。

他の回答で言及されていると思いますが、別のデータ構造、おそらく辞書を使用する方がよいでしょう。たとえば、あなたの例では:

A = "Hello"
B = 12
C = "This is C"

次の方法で実行できます。

my_dict = {}
my_dict["A"] = "Hello"
my_dict["B"] = 12
my_dict["C"] = "This is C"

そして、これを簡単に行うことができます:

mynames = ["A","B","C"]
print [my_dict[key] for key in mynames]

コンソールでは、これが結果です。

>>> my_dict = {}
>>> my_dict["A"] = "Hello"
>>> my_dict["B"] = 12
>>> my_dict["C"] = "This is C"
>>> mynames = ["A","B","C"]
>>> print [my_dict[key] for key in mynames]
['Hello', 12, 'This is C']

それらを 1 つの文字列にするのは簡単です。ここから取得できると確信しています。

于 2012-10-11T09:03:33.187 に答える
0

evalここにあなたの友達がいます:

",".join([ str(eval(e)) for e in mynames ])
于 2012-10-11T08:44:38.697 に答える