Что более показательно, а что такое асимптотическая сложность (или они эквивалентны) в Python?Python list.append, если нет в списке против производительности set.add
set.add(12)
if 12 not in somelist:
somelist.append(12)
Что более показательно, а что такое асимптотическая сложность (или они эквивалентны) в Python?Python list.append, если нет в списке против производительности set.add
set.add(12)
if 12 not in somelist:
somelist.append(12)
Комплект намного быстрее, в общем. Тестирование членства в списке - O (n), линейное по размеру списка. Добавление в набор - O (1), независимо от количества элементов в списке. Кроме того, код списка выполняет два вызова функций: один, чтобы проверить, есть ли 12 в списке, а другой - добавить его, в то время как операция set делает только один вызов.
Обратите внимание, что список решение может быть быстрым, хотя, когда элемент не должен быть добавлен в список, потому что он был найден рано в списке.
# Add item to set
$ python -m timeit -s 's = set(range(100))' 's.add(101)'
10000000 loops, best of 3: 0.0619 usec per loop
# Add item not found in list
$ python -m timeit -s 'l = list(range(100))' 'if 101 not in l: l.append(101)'
1000000 loops, best of 3: 1.23 usec per loop
# "Add" item found early in list
$ python -m timeit -s 'l = list(range(100))' 'if 0 not in l: l.append(0)'
10000000 loops, best of 3: 0.0214 usec per loop
# "Add" item found at the end of the list
$ python -m timeit -s 'l = list(range(102))' 'if 101 not in l: l.append(101)'
1000000 loops, best of 3: 1.24 usec per loop
https://wiki.python.org/moin/TimeComplexity. 'item in list' -' O (n) ', поэтому выигрывает' set.add'. – jonrsharpe
Это было проще, чем я ожидал ответить, позаботьтесь о некоторых деталях реализации в ответ, и я соглашусь с этим? Он говорит, что набор аналогичен dict, являются ли они обе хэш-картами в Cpython? – GL2014
: http://stackoverflow.com/questions/3949310/how-is-set-implemented lists: http://stackoverflow.com/questions/3917574/how-is-pythons-list-implemented –