2011-11-14 9 views
1

私は文や関数を割り当てる何らかの名前をループすることで変数を作成したいと思っています。私はどのように私はそれを行うだろうよう整数と文字列の組み合わせを反復して変数を作成するにはどうすればよいですか?

i = 1 
while 1: 
    ("t" + str(i)) = [0,0,0,0] 
    i = i + 1 

が見えるものを達成することができます「t1t2t3」と題した変数などを持って終了します。 (str("t")を先頭に置いて、2番目の文字をint(i)に変更してください。これは後で配列に入れて、コードに入力しなくても済むように変数を作成するためです)10,000リストのリストを作成しようとしていますそれぞれ4つの要素で構成されます。これはもっと明確ですか?

+2

後で配列に入れようとしているのであれば、今すぐ配列に入れてみませんか? – Chris

+0

最初に定義する必要があります。 – Zizma

+0

最初に定義する必要があるのはなぜですか? – kindall

答えて

5

それはあなたがやりたいことは技術的には可能ですが、それは本当に悪い習慣です。これはまさにリスト(または配列)が作成されたユースケースであり、ここで使用する必要があります。

あなたのコードサンプルに基づいて、

t = [[0] * 4 for i in xrange(10000)] 

(デビッド・アルバーコメントで述べたように)のようなものは、あなたのために働くべきです。それぞれ4つの要素からなる10000リストのリストを作成します。

P.S. Python 3では、xrange関数の名前がrangeに変更されました。

+0

ありがとう!あなたとDavid Albersの答えはどちらもうまくいくでしょう。両方をチェックする方法はありますか? :) – Zizma

+0

あなたは受け入れますか?いいえ、あなたは1つの答えしか受け入れることができません。しかし、あなたは両方をupvoteすることができます。 –

+0

ああ、私は同意します。私は両方をupvoteします。 – Zizma

5

試してください。

代わりに、すべての値を維持するために単一の辞書を使用する - あなたのタイトルは、キーを指定できます

my_dict = {} 
for i in range(1, 4): 
    my_dict['t%s' % i] = foo 
+0

これは別の変数を作成しますか? – Zizma

+0

これは個々の変数を作成するよりも技術的には優れていますが、ここではリストを使用することは推奨できません。 –

3

t = [[0] * 4] * 10000が動作しますが、おそらく期待したことをしません。 10000リストのリストを作成するのではなく、10000 の参照をからの単一ののリストに作成します。あなたは、内側のリストの要素を変更する起動しようとすると何が起こるかを見てみましょう:

代わり
>>> t = [[0] * 4] * 3 
>>> t 
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
>>> t[0][0] = 1 
>>> t 
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] 

、次はあなたが期待していたものを、おそらくです:

>>> t = [[0] * 4 for _ in xrange(3)] 
>>> t 
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
>>> t[0][0] = 1 
>>> t 
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 

理由はリストを掛けることです元のリスト内の要素への複数の参照を含む長いリストを作成するだけです。 のことを知っていない限り、これは決して良い考えではありません。リストには、完全に不変なオブジェクト(数字や文字列など)が含まれています。そのため、[[0] * 4] * 10000の外側のリストの乗算は危険ですが、回答の私のバージョンで[0] * 4にリスト乗算を使用しても構いません。

関連する問題