2012-01-19 11 views
3

私はこれまでにコードすることができる唯一の方法は、盲目的にキーボードを振っていることです。だから私は、次のように動作しない理由優れた理由があります確信している:リストの値をPythonのリストに追加する

l = [] 

grouping = compactlist.index(namelist[n]) 
l[grouping].append(start[n]) 
l[grouping].append(end[n]) 

それでは、私がやろうとしていることstartリストから値を取得してlにリストに追加される - これはそれが表示されるリストは、groupingの値に依存します。 (endについても同様です)。これには、lのリストがオンザフライで作成されている必要があります。これは問題だと思います。

答えて

7

l = [[], []]のように私を起動することはできますが、データ構造としてdefaultdictを使用したいと思うほどです。これにより、あなたのリストをオンザフライで作成することができます。

>>> import collections 
>>> thing = collections.defaultdict(list) 
>>> thing[0].append('spam') 
>>> thing[1].append('eggs') 
>>> print thing 
defaultdict(<type 'list'>, {0: ['spam'], 1: ['eggs']}) 
>>> thing[0] 
['spam'] 
>>> thing[69] 
[] 
+0

これは、必要なキーを事前に伝えることができない場合にこれを行う方法です。リストではなく、トップレベルの辞書を使用します。 defaultdictは、リストを明示的に作成する必要がないことを意味します。 –

+0

'dict'や' defaultdict'を使う場合の唯一の潜在的な問題は、あなたがやっていることや何をやり直したいのかに依存してキーの固有のシーケンシャルな順序付けがないことです関連する値。 – martineau

+0

ありがとう、私はdefaultdictで実験しようと思います。幸運にも注文は問題ではありません。 – lowercasename

0

はあなたに2つの空のリストのリストを提供します

l = [[],[]] 

で起動してみてください、とあなたはすでに書かれているコードを使用して、それらのいずれかに追加することができます。

編集

あなたはコメントで言及として、あなたは以上の二つのリストが必要になります。あなたははしかし、事前に知っていない場合、またはあなたが必ずしも素敵定期的に生成されていない場合

l = [[] for x in range(number_of_lists)] 

:あなたはあなたが必要になりますどのように多くの事前にわかっている場合、あなたはこのように、この技術を拡張することができます0,1,2,3、...のような数字では、リストのリストは必要ありません。その場合は、リストの辞書が必要です。その場合、@wimの答えが最善の解決策です。

*おそらく、あなたのgroupingの値は100,20000,300000などになります。実際にはの場合はリストを必要としません。

+0

Ack、私の間違い! 'grouping'_won't_は0または1のどちらかでしかないので、それ以上の値があるかもしれません。ごめんなさい!今編集中。 – lowercasename

+2

@lowercasename 'l = [[]] * number_of_lists'はほとんどあなたが望むものではありません。 'number_of_lists' **参照**を含むリストを*単一の空のリスト*に作成します。通常、 'l [n] .append(something)'の動作が非常に直感的ではないので、決してこれは望んでいません。 Pythonプロンプトで次のように入力してみてください: 'l = [[]] * 10;プリントl; l [3] .append( '奇妙な');印刷l。 – Ben

+0

@Benが話していることを避けるためには、 'l = [[] for i in range(number_of_lists)]'を使用してください。 – martineau

関連する問題