私は、Pythonのリストがベクトルとして実装されていることを理解しました。だから私は以下のコードがPythonでは(なぜ3.1.3では、そしてPython 3.2では65xしか)同等のCコードより100倍遅いのか説明できません。Pythonのリストは、Cの配列:100倍遅い?
単に繰り返し、nbExtract
回リストの最大値を抽出します。
nbValues = int(input())
nbExtract = int(input())
values = [int(value) for value in input().split()]
for loop in range(nbExtract):
idMax = 0
for idValue in range(nbValues):
if values[idMax] < values[idValue]:
idMax = idValue
print(values[idMax], end = ' ')
values[idMax] = values[nbValues- 1]
nbValues= nbValues - 1
注:nbExtract
ログ未満とすることができる(nbValues)は値をソートすることは、通常遅い
I kown (例えば、内部のmax
関数を使用して)これを高速化する方法はありましたが、これは高校生のための練習であり、私たちは基礎(if/else、for、while、およびlists)を教えています。 Python。
同じ構造を維持しながらスピードを向上させる方法はありますか?私はPythonの配列を試しましたが、速度はおおよそ同じです。
誰かがなぜ内部的にPythonがリスト操作の速度がそれほど遅いのか知っていますか?要求され、同等のCコードとして
:
#include <stdio.h>
int main()
{
int nbValues, nbExtract ;
scanf("%d%d", &nbValues, &nbExtract);
int values[nbValues];
for (int idValue = 0; idValue < nbValues; idValue++)
scanf("%d", &values[idValue]);
for (int loop = 0; loop < nbExtract; loop++)
{
int idMax = 0;
for (int idValue = 0; idValue < nbValues; idValue++)
if (values[idMax] < values[idValue])
idMax = idValue;
printf("%d ", values[idMax]);
values[idMax] = values[nbValues - 1];
nbValues--;
}
return 0;
}
同等のCコードを掲載できますか? –
Pythonはすべての配列アクセスに対して境界外条件をチェックしますか? – pmg
_Python配列_を持つ 'array'モジュールを意味しますか? – rubik