2013-02-11 2 views
6

for-loop内で一意の名前を持つ一連のリストを作成し、そのリストを使用してリスト名を作成したいとします。ここで私は、私は、このようなfor-loopでPythonで一意の名前のリストを作成

lst_100 = [], lst_2 =[] lst_300 = [].. 

任意の助けとして、空のリストを作成したい

x = [100,2,300,4,75] 

for i in x: 

    list_i=[] 

何をしたいのですか?

答えて

12

動的に名前が付けられた変数を作成しないでください。それは彼らと一緒にプログラムするのが難しいです。

x = [100,2,300,4,75] 
dct = {} 
for i in x: 
    dct['lst_%s' % i] = [] 

print(dct) 
# {'lst_300': [], 'lst_75': [], 'lst_100': [], 'lst_2': [], 'lst_4': []} 
+0

は、元のxの順序を保持したままで行う方法はありますか?代わりに私はここで、ルートの答えでは、 "100,2,300,4,75"の順番が保持されていないことを確認します。私はこれがいくつかの独身の財産であると思います。 – Coolio2654

+0

@ Coolio2654:そうです。 'dict'キーは注文されません。キーが挿入された順序を保持するには、['collections.OrderedDict'](https://docs.python.org/2/library/collections.html#collections.OrderedDict)を使用します:(' dct = } ' - >' 'コレクションをインポートする' 'dct = collections.OrderedDict()')。 – unutbu

5

はあなたのリストを保持するために、辞書を使用します:

In [8]: x = [100,2,300,4,75] 

In [9]: {i:[] for i in x} 
Out[9]: {2: [], 4: [], 75: [], 100: [], 300: []} 

各リストにアクセスするには:代わりに、辞書を使用

In [10]: d = {i:[] for i in x} 

In [11]: d[75] 
Out[11]: [] 

をそして、あなたは本当にそれぞれにlst_を持つようにしたい場合はラベル:

In [13]: {'lst_{}'.format(i):[] for i in x} 
Out[13]: {'lst_100': [], 'lst_2': [], 'lst_300': [], 'lst_4': [], 'lst_75': []} 
+0

それは私の最初の考えであった、あなたはそれに最初に行く:P –

+1

@ F3AR3DLEGEND - それはそれを行う最もpythonic方法だと思う:) – root

+0

これは*辞書の理解*ですか? :-) –

0

他のdict-solutionsに若干のバリエーションがあるのは、defaultdictを使うことです。選択した型のデフォルト値を呼び出すことによって、初期化ステップをスキップすることができます。

この場合、選択したタイプが辞書にあなたの空のリストを与えるリストです:

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> d[100] 
[] 
関連する問題