私はpythonこのような関数を書いていました
_def foo(some_list):
for i in range(0, len(some_list)):
bar(some_list[i], i)
_
それが呼ばれたように
_x = [0, 1, 2, 3, ... ]
foo(x)
_
リストのインデックスアクセスはO(1)
であると想定していましたが、大きなリストの場合、これが予想よりも大幅に遅いことに驚きました。
私の質問は、pythonリストがどのように実装されているか、そして以下のランタイムの複雑さは何ですか?
list[x]
_list.pop()
list.pop(0)
list.append(x)
追加のクレジット、スプライシングまたは任意のポップ。
python wiki の非常に詳細な表)があり、質問に答えます。
ただし、特定の例では、enumerate
を使用してループ内の反復可能オブジェクトのインデックスを取得する必要があります。そのようです:
for i, item in enumerate(some_seq):
bar(item, i)
答えは「未定義」です。 Python言語は、基礎となる実装を定義していません。あなたが興味を持っているかもしれないメーリングリストのスレッドへのリンクがいくつかあります。
また、ループを記述するよりPython的な方法は次のようになります。
def foo(some_list):
for item in some_list:
bar(item)
インデックスと値が必要な場合は、enumerateを使用します。
for idx, item in enumerate(range(10, 100, 10)):
print idx, item
Pythonは実際には配列だけをリストします。したがって、
インデックス作成にはO(1)が必要です
ポップとアペンドの場合は、ドキュメントに従ってO(1)にする必要があります
詳細については、次のリンクを確認してください。
http://dustycodes.wordpress.com/2012/03/31/pythons-data-structures-complexity-analysis/