Наборы Python по сравнению со списками

У вас есть проблема XY .

Вы пытаетесь сократить время, необходимое для устранения вашей первоначальной проблемы. Вместо этого вы должны просто установить правильный формат чисел.

Range("v11:ay9000").numberformat = "0%;-0%;;"

167
задан Mantas Vidutis 12 August 2019 в 05:59
поделиться

3 ответа

Это зависит от того, что вы собираетесь с ним делать.

Наборы значительно быстрее определяют, присутствует ли объект в наборе (как в x в s ), но медленнее, чем списки, когда дело доходит до перебора их содержимого.

Вы можете использовать модуль timeit , чтобы узнать, какой из них быстрее в вашей ситуации.

205
ответ дан 23 November 2019 в 20:59
поделиться
from datetime import datetime
listA = range(10000000)
setA = set(listA)
tupA = tuple(listA)
#Source Code

def calc(data, type):
start = datetime.now()
if data in type:
print ""
end = datetime.now()
print end-start

calc(9999, listA)
calc(9999, tupA)
calc(9999, setA)

Вывод после сравнения 10 повторений для всех 3: Сравнение

0
ответ дан 23 November 2019 в 20:59
поделиться

Я интересовался результатами при проверке с CPython, если значение является одним из небольшого количества литералов. set победы в Python 3 по сравнению с tuple, list и or:

from timeit import timeit

def in_test1():
  for i in range(1000):
    if i in (314, 628):
      pass

def in_test2():
  for i in range(1000):
    if i in [314, 628]:
      pass

def in_test3():
  for i in range(1000):
    if i in {314, 628}:
      pass

def in_test4():
  for i in range(1000):
    if i == 314 or i == 628:
      pass

print("tuple")
print(timeit("in_test1()", setup="from __main__ import in_test1", number=100000))
print("list")
print(timeit("in_test2()", setup="from __main__ import in_test2", number=100000))
print("set")
print(timeit("in_test3()", setup="from __main__ import in_test3", number=100000))
print("or")
print(timeit("in_test4()", setup="from __main__ import in_test4", number=100000))

Вывод:

tuple
4.735646052286029
list
4.7308746771886945
set
3.5755991376936436
or
4.687681658193469

Для 3 - 5 литералов, set все еще победы с большим отрывом, и or становится самым медленным.

В Python 2, set является всегда самым медленным. or является самым быстрым для 2 - 3 литералов, и tuple, и list быстрее с 4 или больше литералами. Я не мог отличить скорость [1 112] по сравнению с [1 113].

то, Когда значения для тестирования кэшировались в глобальной переменной из функции, вместо того, чтобы создать литерал в цикле, set, победило каждый раз, даже в Python 2.

, Эти результаты относятся к 64-разрядному CPython на Core i7.

0
ответ дан 23 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: