Форум сайта python.su
o7412369815963А попробуй тогда поменять местами tuple и list в инициализации ‘a’ (с сохранением тех же чисел 100000 и 10):
У меня результаты прежние, лист всех обгоняет
a = (tuple(range(COUNT)), list(range(COUNT)),
array.array('l', list(range(COUNT))),
numpy.zeros(COUNT))
Офлайн
Ну а если инициализацию сделать прозрачной, то как и получалось у меня, array обгоняет всех, а tuple и list становятся одинаковыми.
data_list = list(range(COUNT))
random.shuffle( data_list )
a = (tuple(data_list), list(data_list),
array.array('l', list(data_list)),
numpy.zeros(COUNT))
Офлайн
> А попробуй тогда поменять местами tuple и list в инициализации ‘a’ (с сохранением тех же чисел 100000 и 10):
Да, какая-то мистика, результат не должен меняться т.к. тесты выбираются случайно:
col = random.choice(a)
Офлайн
o7412369815963На самом деле, это не совсем скорость. Это алгоритмическая сложность. И она указывает нам на то, что скорость указанных операций с массивом не будет зависит от его размера, а для list - будет увеличиватся пропорционального количеству элементов в нем. Поэтому преимущество в скорости может проявится на очень больших набор данных.
Вообщем к чему была поднята тема - одной из самых важных особенностей разных типов данных является скорость обработки, как известно скорость доступа к элементам равна:
массив = O(1)
лист = O(n) #(лист в обычной реализации)
Офлайн
o7412369815963Так и надо писать тесты.
В моем тесте (1 пост) результат не меняется от перестановки.
o7412369815963В питоне list - это и есть массив, это не список в классическом понимании этого слова.
оказалось в питоне заменив лист на массив мы не выиграем времени - 1 важный фактор массивов (tuple, array) отсутствует.
o7412369815963Это верно, ведь array хранит сами значения фиксированной длины последовательно в памяти, а list - указатели (так же последовательно в памяти) на объекты (речь, конечно, идет только о питоне).
в итоге у array остается только 1? отличительная особенность - оптимальный расход памяти.
Офлайн
kachayevТвое сообщение появилось пока я писал ответ :)
На самом деле, это не совсем скорость. Это алгоритмическая сложность. И она указывает нам на то, что скорость указанных операций с массивом не будет зависит от его размера, а для list - будет увеличиватся пропорционального количеству элементов в нем. Поэтому преимущество в скорости может проявится на очень больших набор данных.
Isem
В питоне list - это и есть массив, это не список в классическом понимании этого слова.
Офлайн
IsemПохоже на то, время вставки элемента (insert) увеличивается пропорционально увеличению размера.
В питоне list - это и есть массив, это не список в классическом понимании этого слова.
Офлайн
o7412369815963Похоже что его нет, в принципе его тут и не надо, т.к. листы в основном используют на высоких нагрузках, а значит пишутся на С/С++ и подобных (возможно сам питон их юзает), а если нагрузка не высокая - значит можно обойтись массивом.
Тогда такой вопрос, где настоящий лист, со сложностью вставки O(1) ?
Офлайн
Классических списков не припомню. Есть http://pypi.python.org/pypi/blist/ — сложность вставки логарифмическая.
Офлайн