はPythonのラインを考えてみましょう。この場合、Pythonはどのアルゴリズムを使用しますか?Pythonはどのようにstr [:: - 1]を実装していますか?私はそれが非常に速く、そしていくつかの<strong>O(n)の</strong>ソリューションと、メモリの節約よりも道より高速です参照</p> <pre><code>str[::-1] </code></pre> <p>:
答えて
えええええええええええええええええええええええええええええええっ、ここでは最初のパスである:
In [1]: import time
In [2]: def reverse_list_time(my_list):
...: start = time.time()
...: reversed = my_list[::-1]
...: stop = time.time()
...: return stop - start
...:
In [3]: reverse_list_time(list(range(1000)))
Out[3]: 1.33514404296875e-05
In [4]: testing_lists = (list(range(n)) for n in range(1000,100000,500))
In [5]: testing_lists
Out[5]: <generator object <genexpr> at 0x7f7786bd97d8>
In [6]: results = list(map(reverse_list_time,testing_lists))
そしてここでは、私の結果は、私にはおおよそO(n)を見えること
です。
これであなたが納得できない場合は、 the implementationです。それは私にとってはかなり簡単なO(n)の解決策のように見えます。これは、それの肉です:else {
result = PyList_New(slicelength);
if (!result) return NULL;
src = self->ob_item;
dest = ((PyListObject *)result)->ob_item;
for (cur = start, i = 0; i < slicelength;
cur += step, i++) {
it = src[cur];
Py_INCREF(it);
dest[i] = it;
}
return result;
あなたはstr[::-1]
を分解するためにPythonのdis.dis
モジュールを使用することができます。
>>> import dis
>>> def reverse_(str_):
... return str_[::-1]
...
>>> dis.dis(reverse_)
6 0 LOAD_FAST 0 (str_)
3 LOAD_CONST 0 (None)
6 LOAD_CONST 0 (None)
9 LOAD_CONST 1 (-1)
12 BUILD_SLICE 3
15 BINARY_SUBSCR
16 RETURN_VALUE
あなたは各命令がdocumentationに何を意味するのか見ることができます。 LOAD_FAST
については、
ローカル
co_varnames[var_num]
への参照をスタックにプッシュします。
co_varnames
は、常にコードオブジェクトに存在する構造体です。この場合には、str_
ある:
>>> reverse_.__code__.co_varnames
('str_',)
次の命令、LOAD_CONST
は、このように記載されている:
はスタックに
co_consts[consti]
を押します。
スタックにプッシュされた値はNone
です(dis
が役に立ちます)。次の2つの命令は、命令であり、値None
と-1
をスタックにプッシュします。
がスタックにスライスオブジェクトをプッシュ:として
次の命令、
BUILD_SLICE
は、記載されています。 argcは2または3でなければなりません.2の場合はslice(TOS1, TOS)
がプッシュされます。 3の場合はslice(TOS2, TOS1, TOS)
が押されます。詳細については、slice()
ビルトイン関数を参照してください。
TOS2, TOS1, TOS
は、(オブジェクトがslice(None, None, -1)
なる)スタックからslice()
オブジェクトにプッシュされたスタックNone, None, -1
、上の値を表します。
BINARY_SUBSCR
は、以下のように記載されている:
は
TOS = TOS1[TOS]
を実装します。
これは、Pythonは、前の命令でスタックにプッシュsli
がslice()
オブジェクトであるstr_[sli]
を計算することを意味します。関数の呼び出し元へTOSと
戻り値:それは最後に
>>> str_[slice(None, None, -1)]
、
RETURN_VALUE
のと同等です。
最後の命令は前のステップの結果を返します。これは逆のstr_
です。私はそれが非常に速く、そしていくつかのO(n)のソリューションと、メモリの節約よりも道より高速です参照
概要
。
実際、スライスによるリストの逆転は、Pythonの他の逆転メソッドよりも多くのメモリオーバーヘッドを伴います。長いストーリーは短く(長いウサギの穴を通らずに)、スライス操作によってリスト全体が返されるため、メモリオーバーヘッドが大きくなります。
代わりに、reversed()
を使用してイテレーターを生成することもできます(通常、このイテレーターからリストを生成するには時間がかかります)。
この場合、Pythonはどのアルゴリズムを使用しますか?
長い話を短くする:Pythonは、変数str
をロードslice(None, None, -1)
オブジェクトを構築し、str[slice(None, None, -1)]
(source code)を実装して、逆str
を返します。
- 1. どのブール値がより高速ですか? <または<=
- 2. ファイルリダイレクトVS.</p> <pre><code>while(<>){ print; } </code></pre> <p>と私はこのようにリダイレクトしてファイルに渡す必要があります考えています:<code>./sort.pl < wordlist</code>を、それが持っている私はそうのようないくつかのファイルからSTDINにかかる<code>sort.pl</code>という名前のperlスクリプトを持って
- 3. C#が、私はそれにいくつかのものと1つのユーザーコントロールを作成している、と私はそれが1 <code>button</code>で私<code>form1</code>クリックで可能だと<code>button</code><code>form1</code>内の私の<code>usercontrol</code>を開くことはありませんということかどうかを知る必要があり
- 4. 私は、それはperlの</p> <p>私がいたを使用して行うことができますどのように</p> <pre><code>String sql = Query1; </code></pre> <p>のようにそれを交換したい行</p> <pre><code>String sql="select * from "+ "emp_data"; </code></pre> <p>のように私が持っている私のファイルでのPerl
- 5. どのように...</p> <p>をそれはおそらく非常に簡単です
- 6. BaseType <any>はどのように指定できますか?</p> <pre><code>public class WrapperBase<T> where T : PocoBase </code></pre><p>といくつかの実装をその基底クラスの上に:
- 7. if(n&1)を書くには? <code>int</code>タイプ<code>n</code>については
- 8. どのようにHashSetが<T>です。リストよりも速く収まる<T>.Contains?
- 9. は、それが正常に動作しますが、挿入時に、それの値が</p> <pre><code>Abc.view.report.report.Model-1 </code></pre> <p>と、その新しいようである代わりにヌル
- 10. は、どのように私は、このような</p> <pre><code>lista = {2x,3x+4,5,Cos[x]} </code></pre> <p>として、その後のようないくつかのx値のためのリストを得たMathematicaの
- 11. 私は以下のように必要な出力をしたい、次の入力</p> <pre><code>I/O 1< img > '< input > I/O 1<' img > '< input > </code></pre> <p>ためのPython
- 12. Pythonの検索操作「some_list in some_list」の複雑さはどのくらいですか?それはO(1)またはO(n)の</p> <pre><code>if 35 in l: # ...... </code></pre> <p>です。たとえば
- 13. アクションリンクをクリックした後、そのリンクテキストをどのように参照するのですか?</p> <pre><code>@foreach (var item in Model) { <tr> <td> @Html.ActionLink(item.Name, "Things", new { someId = item.Id}) </td> </code></pre> <p>そして、それはその特定の項目のビューに私を取る:
- 14. RAPT:私のJDKには何が間違っていますか?</p> <pre><code>python android.py installsdk </code></pre> <p>それは通常返します:質問は、私はいくつかのトラブルのコマンドを実行するためにうっとりを得る持って言うよう
- 15. VIM:</p> <pre><code><p> Hello </p> </code></pre> <p>そして、私はそれ</p> <pre><code><p>Hello</p> </code></pre> <p>ようにしたい私は、カーソルを置くしたいと思います:次の非空白文字まで、すべての空白を削除
- 16. Pythonの:それは私が<strong>Pythonの</strong>とその<em>urllib2の</em>と<em>BeautifulSoup</em>ライブラリを使用して、ウェブサイトからデータを抽出するコードを記述しようとしている
- 17. "1 << i"のシフトはどのようにPythonで動作しますか?
- 18. は、私は、このLinuxのコマンドは、私はそれが<strong>OD -c</strong>に<strong>LS</strong>を送信しています知っている</p> <pre><code>ls | od -c </code></pre> <p>を行うかを理解しようとしている
- 19. Mechanizeのは、私は、Microsoftのアカウントにログインしようとしたが、それはworkL</p> <pre><code>br.open(https://login.live.com/) </code></pre> <p>応答は次のようなものが含まれていないクッキー
- 20. Pythonのminidom:</p> <pre><code><example> <para> <phrase>child_0</phrase> child_1 <phrase>child_2</phrase> </para> </example> </code></pre> <p>と私はそれが次のようになりたい::の#textノードは新しい親ノード
- 21. キャスト操作Vs i ++を実行するにはどれくらいの費用がかかりますか? "私はint型= N" その前に想定し</p> <pre><code>i++; </code></pre> <p>:対</p> <pre><code>(MyObject) IObject; </code></pre> <p>:キャストを行うにはどのように高価なのJavaでは、
- 22. は、私はそれが遠征ルートのためにあるように、私はそれをしたい私は</p> <ol> <li>content1</li> <li>content2</li> <li>content3</li> </ol> <p>のような順序付きリストを持っている
- 23. Python dir()はJavaScriptでこれに相当しますか?</p> <pre><code>dir(django.auth.models) </code></pre> <p>、それはあなたの<code>models</code>の内側にすべてのものを与えるだろう、何かがあります:私は、Pythonについて愛した何
- 24. 私はどのようにして、持ち上げられたR.divideに関数を渡すことができますか?これは<code>average</code>のpointfree実装として働く</p> <pre><code>var average = R.lift(R.divide)(R.sum, R.length) </code></pre> <p>どのように来る:
- 25. は私が<code>sketch painting effect, Emboss effect,</code> のような別の効果を試してみて、今私は、<strong><code>Oil Painting Effect</code></strong>を実装しようとmは、いくつかの写真のエフェクトを実装しようとしていますアンドロイド
- 26. PHP短縮形は、私は、次の速記</p> <pre><code>$state = $account->getCity() ? $account->getCity()->getStates() : null; </code></pre> <p>のうちのいくつかの意味を理解しようとしています
- 27. アサーションが失敗したそれらのスレッドで</p> <pre><code>TEST(one, test_one) { vector<thread> threads // ... initialize threads } </code></pre> <p>とどこかを次のように私はテストケースを持っている場合は、どのように私はどのように実行中のすべてのスレッド
- 28. ルビーをインストールし、<code>bundler</code>によって<code>ruby</code>(および<code>rvm</code>)、いくつかの宝石をインストールするには、私が欲しい<code>capistrano</code>と、カピストラーノ
- 29. キャッチは、私はいつも<code>func()</code><code>resolve</code>をしましょう、と私はに指示したい場合<code>yield func()</code>、<br> 後の戻り結果を決定する前に一品、</p> <p>によって<code>onError()</code>に直接、私は<code>func()</code><code>reject</code>からのエラーを保持したい約束
- 30. 2つの別々のsvgsは私がそれらを個別にレンダリングした場合、それは大丈夫です、このような</p> <pre><code><svg>svg 1 stuff</svg> </code></pre> <p>などの2つの別々のsvgsその後、別のSVG</p> <pre><code><svg> svg 2 stuff </svg> </code></pre> <p>を持って