Борисенков Сергей
вы немного не досмотрели условия задачи
условие - получить список уникальных значений, что я не досмотрел?
Борисенков Сергей
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: unhashable type: ‘list’
Ну это же не повод опускать руки ;)
import timeit
from itertools import imap, izip, izip_longest
###################################################################################
def test1(lst):
s = dict(map(lambda i: [i[0] + '#' + i[1], 0], lst))
return [i.split('#') for i in s.keys()]
def test2(lst):
s={}
for i in lst:
s[i[0] + '#' + i[1]] = 0
return [i.split('#') for i in s.keys()]
def test3(lst):
return reduce(lambda y,z: not (z in y) and y.append(z) or y, lst, [])
def test4(lst):
return list(set(map(tuple, lst)))
def test5(lst):
x = [tuple(x) for x in lst]
return list(dict(izip(x, x)).iterkeys())
def test6(lst):
return list(dict(izip_longest((tuple(x) for x in lst), [])).iterkeys())
###################################################################################
if "__main__" == __name__:
data = [['XP11:25C', 'X3:89'],['XP12:5B', 'X3:89'],['XP12:15B', 'X3:89'],
['XP12:25B', 'X3:89'], ['XP12:25B', 'X3:89']]
print("test1", timeit.timeit("test1(data)",
"from __main__ import test1, data", number=1000000))
print("test2", timeit.timeit("test2(data)",
"from __main__ import test2, data", number=1000000))
print("test3", timeit.timeit("test3(data)",
"from __main__ import test3, data", number=1000000))
print("test4", timeit.timeit("test4(data)",
"from __main__ import test4, data", number=1000000))
print("test5", timeit.timeit("test5(data)",
"from __main__ import test5, data", number=1000000))
print("test6", timeit.timeit("test6(data)",
"from __main__ import test6, data", number=1000000))
результат:
test1 7.75889498911
test2 4.86464391964
test3 2.71476288664
test4 2.61486176313
test5 4.69240897403
test6 4.87071962446
set, как и ожидалось, самый быстрый вариант.
anshik, если список out, генерируете Вы сами, рассмотрите возможность получения списка кортежей вместо списка списков, тогда удаление повторяющихся элементов будет еще быстрее.
при прочих равных условиях:
test4 1.20101419959
test5 2.98147578504