ну все - разобрался. чтобы окончательно закрыть вопрос, небольшое сравнение по скорости PHP/Python List/Python Bisect
QTY1_30000 - это означает время затраченное на создание массива из 30 тысяч элементов.
QTY2_30000 - это означает время затраченное на 30 тысяч поисков в созданном массиве, которые берутся из другого массива.
ПАМЯТЬ: сколько весит приложение с массивом в 30 тысяч строк - длина элемента в массиве 101 байт.
======================================================================
значения для PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli)ПАМЯТЬ: 66136K
QTY_1:30000
2.0054268837
QTY_2:30000
104.426306009
$chars = 'qwertyuiopasdfghjklzxcvbnm_01234567890';
function create_word(){
global $chars;
$w = '';
for ($i = 0; $i <= 100; $i++) {
$w .= $chars{rand(0, 37)};
}
return $w;
}
function create_list_of_words($count_of_words) {
$l = array();
for ($i = 0; $i < $count_of_words; $i++) {
$l[] = create_word();
}
return $l;
}
$t = microtime(true);
$l = create_list_of_words(30000);
print "\nQTY_1:".count($l)."\n";
print microtime(true) - $t;
$ls = create_list_of_words(30000);
print "\nQTY_2:".count($ls)."\n";
$t = microtime(true);
foreach ($ls as $v) {
if (in_array($v, $l)) {
true;
}
}
print "\n" . (microtime(true) - $t);
======================================================================
значения для Python 2.5.2 (работа с листами)ПАМЯТЬ: 19060K
QTY1_:30000
3.97967195511
QTY2_:30000
41.5297501087
import bisect
import random
import time
chars = u'qwertyuiopasdfghjklzxcvbnm_01234567890'
def create_word():
w = ''
for n in range(101):
w += random.choice(chars)
return w
def create_list_of_words(count_of_words):
l = []
for i in xrange(count_of_words):
l.append(create_word())
return l
t = time.time()
l = create_list_of_words(30000)
print '\nQTY1_:%s' % len(l)
print time.time() - t
ls = create_list_of_words(30000)
print '\nQTY2_:%s' % len(ls)
t = time.time()
for v in ls:
if v in l:
pass
print time.time() - t
======================================================================
значения для Python 2.5.2 (работа с bisect)ПАМЯТЬ: 19028K
QTY1_:30000
4.41841101646
QTY2_:30000
0.0710809230804 !!!!!!!!
import bisect
import random
import time
chars = u'qwertyuiopasdfghjklzxcvbnm_01234567890'
def create_word():
w = ''
for n in range(101):
w += random.choice(chars)
return w
def create_list_of_words(count_of_words):
l = []
for i in xrange(count_of_words):
bisect.insort(l, create_word())
return l
def create_list_of_words2(count_of_words):
l = []
for i in xrange(count_of_words):
l.append(create_word())
return l
t = time.time()
l = create_list_of_words(30000)
print '\nQTY1_:%s' % len(l)
print time.time() - t
ls = create_list_of_words2(30000)
print '\nQTY2_:%s' % len(ls)
t = time.time()
for v in ls:
try:
if l[bisect.bisect_left(l, v)] == v:
pass
except:
pass
print time.time() - t
питон на высоте, даже с обычными листами - он обходит ПХП. как у меня раньше получалось иначе - не понимаю, такчто PooH - вы были правы на 100% извиняюсь за дэзу
и еще раз всем спасибо, открыл да себя реально полезную вещицу )