Для блага любого, кто может поверить, например, что выполнение aset.add()
в цикле будет конкурентоспособным по сравнению с aset.update()
, вот пример того, как вы можете быстро проверить свои убеждения перед публикацией:
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 294 usec per loop
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 950 usec per loop
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 458 usec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 598 usec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 1.89 msec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 891 usec per loop
Похоже, что цена за элемент в циклическом подходе в три раза выше, чем в update
.
Использование |= set()
стоит примерно в 1,5 раза больше, чем update
, но вдвое меньше, чем при добавлении каждого отдельного элемента в цикл.