2016-10-07 6 views
0

これは愚かな質問かもしれませんが、次のようなシナリオを想像してみてください。リストがいっぱいになるとDataFrameに変換されます。あなたは事前に最終的なサイズを知らないので、適切なサイズで事前に割り当てることはできません。なぜlist.insert()にギャップが残らないのですか?

あなたはそれの長さを超えてインデックスにリストをしようとした場合、それは不合理ではないIndexErrorを与える行(つまり、ネストされたリスト)を投入しながら:

>>> row = list() 
>>> row.append('a') 
>>> row[3] = 'c' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list assignment index out of range 

をただし、あなたがinsert(index, element)メソッドを使用する場合、私はリストにギャップがあることが予想されていただろう(少なくともギャップがあるという選択肢がある)。結局のところ、私が最後に追加したいのであれば、代わりにappend(element)を使用したでしょう。

>>> row = list() 
>>> row.append('a') 
>>> row.insert(3,'c') 
>>> row 
['a', 'c'] 

これまで見てきたように、これは当てはまりません。これはなぜですか?

ギャップリストを取得する唯一の可能な方法をリスト上で反復するカスタムラッパー関数を作成しています。 ['a', None, 'c'](またはその他のデフォルト値)ですか?

+0

'NONE'は単なるオブジェクトではなく、NULLポインタです。期待される出力に「ギャップ」はありません。はい、それを達成するためのカスタム関数を構築する必要があります。 –

+1

'l.insert(index、value)'は 'l [index:index] = [value]'と同じもので、常にスライスが機能します(必要な場合は空のスライスを生成します)。そうでなければインデックスが大きすぎる場合。 –

+0

疎な表現のためにdictsのdictを使って 'DataFrame'を構築しようとするならば、' pdf.DataFrame.from_dict'はデフォルトで '' columns''パラメータをとるtailor-madeコンストラクタを持っています。各サブディッチが行を表す場合は 'index'に設定することができます。これは 'NaN'でギャップを埋めるでしょう。 –

答えて

2

いいえ、Pythonリストはギャップをサポートしていません。彼らは疎ではありません。終わりを過ぎて「挿入」することは、追加することと同じです。

Noneは他の言語のnullポインタと同じではありません。ただ1つのオブジェクトです他の言語ではよくnullポインタが使用されることがあります。そうでなければまだ別のオブジェクトです。あなたが疎のデータ構造が必要な場合は

は、これを実行する最も簡単な方法は、辞書を使用することです:

row = {} 
row[3] = 'c' 
1

おそらくlistの機能を使用していない可能性があります。どのようにそれをdictに格納して、一度完全に入力したらリストを作成するのですか?

d = {index: item for index, item in yourData} 
result = [None]*max(d.keys()) 
for index, item in d.items(): 
    result[index] = item 
#result is now a list with None filled at indices that do not have data.. 
関連する問題