1

数字の長いリストの先頭から要素を削除する方法はありますか? 現在、del arr[i:i+x] を実行していますが、そのポイントを超えてすべてを左に移動する必要があるため、速度が遅く、大きなリストでは時間がかかります。

私は両端キューを調べましたが、それらがここに当てはまるかどうかはわかりません。いくつかの方向を使用できます!

4

5 に答える 5

1

はい、ここにdeque当てはまります。それを使用する方法を示す例を用意しました:

import collections

"create deque from list"
d=collections.deque([1,2,3,4,5,6])
"remove first element"
d.popleft()

print d

出力:

deque([2,3,4,5,6])
于 2013-04-24T03:05:09.683 に答える
0

おそらくツリーまたはスキップリストが必要だと思います。

しばらく前に Python ツリーの実装について調査しました: http://stromberg.dnsalias.org/~strombrg/python-tree-and-heap-comparison/

これについては、サイトのアルゴリズム セクションで質問したほうがよいかもしれません。

于 2013-04-24T04:00:19.417 に答える
0

連続して複数の削除を行っている場合は、フィルター付きのジェネレーターを使用して新しいリストを作成する方が効率的かもしれません。

arr = [e for e in arr if not rejected(e)]

インデックスを操作する必要がある場合は、enumerate を使用できます。

arr = [e for i, e in enumerate(arr) if not rejected(i)]

どちらの操作も O(n) (スペースでは O(2*n)) ですが、連続して複数の削除を実行すると O(n*m) (ただし、スペースでは O(n)) になります。

dequeこの特性は、あなたが望むものではないかもしれません:

インデックス アクセスは両端で O(1) ですが、途中で O(n) まで遅くなります。

于 2013-04-24T03:18:00.807 に答える