Форум сайта python.su
0
pyuserИмеет, и думаю над этим. Спасибо.
А если товарищ anshik имеет возможность вместо списка списков получить список кортежей, то тогда вообще ни какой головной боли
Офлайн
36
anshikнет :(
Кстати, а в 2.7 список хешируется для набора?
anshikтогда, наверно, Вам следует остановиться на варианте с reduce - типы элементов списка на входе и на выходе одинаковы
жалко что tuple немутируемый, а список не хешируемый
Отредактировано (Янв. 27, 2011 09:47:17)
Офлайн
0
О сколько нам открытий чудных….
В общем так:
test3 на большом объеме данных очень медленный - выкинул из теста:
генерируем данные:
import random
def pair_rand_list(start,end,step):
s1='XP{0}:{1}{2}'.format(random.randrange(start,end,step),random.randrange(start,end,step), chr(random.randrange(65,90,1)))
s2='X{0}:{1}'.format(random.randrange(start,end,step),random.randrange(start,end,step))
return [s1,s2]
def create_list(end):
return [ pair_rand_list(1,10,1) for i in xrange(end)]
Офлайн
36
Борисенков Сергей, согласен, reduce для больших списков не годится :(
Борисенков Сергейвывод был сделан еще на первой странице - вариант с set - самый быстрый, даже с обратным преобразованием кортежей в списки, он остается самым быстрым :)
т.е. делаем выводы
list(imap(list, set(imap(tuple, data))))
Офлайн
0
Спасибо, помогли. Я понял где нужно было переходить на наборы :) Просто при пробегании по двум спискам складывать элементы полученные в набор. И тогда не нужно чистить получившийся список. Понимаю, что немого зря мучил, но может кому другому пригодится, или в другой раз понадобится. :)
x4_x5 = set() # находим, если левая и правая часть совпадают, то идем дальше, если уже есть в списке пропускаем
t = time()
for i in x5:
for j in x4:
if i[0] == j[1]: # левые части 5 совпадают с правыми частями 4
#out.append([j[0], i[1]])
x4_x5.add((j[0], i[1]))
elif i[0]==j[0]: # левые части 5 совпадают с левыми частями 4
#out.append([j[1], i[1]])
x4_x5.add((j[1], i[1]))
print time()-t
Офлайн
0
Перенес вопрос в отдельную тему: http://python.su/forum/viewtopic.php?pid=67899#p67899
Отредактировано (Март 9, 2011 00:48:06)
Офлайн
1
через set и zip не сохраняется сортировка.
“Модный вариант” сохраняет.
l = [e for i,e in enumerate(l) if e not in l[:i]]
Офлайн