Код: Выделить всё
import time
import matplotlib.pyplot as plt
# list size
size = 100000
# number of points
n = 100000
# display for not having to count zeros
if size >= 1000000:
new_size = str(int(size/1000000))+"M"
else:
new_size = str(int(size/1000))+"K"
if n >= 1000000:
new_n = str(int(n/10000000))+"M"
elif n >= 1000:
new_n = str(int(n/1000))+"K"
else:
new_n = n
lst = list(range(size))
result = []
for number in range(0,size+1,int(size/n)):
start_time = time.time_ns()
if number in lst:
end_time = time.time_ns()
total_time = (end_time-start_time)/1000000000 #convert ns to seconds
result.append([total_time,number])
print(number,total_time)
x_values, y_values = zip(*result)
plt.scatter(x_values, y_values, c='red', marker='o',s=5)
plt.xlabel('Time (sec)')
plt.ylabel('Number')
plt.title(f'List length: {new_size}\nNumber of points: {new_n}\n\nTime to find number in list')
plt.grid(True)
plt.show()
Список должен быть больше определенной длины, чтобы Python требовал достаточно много времени, чтобы найти число, которое мы можем измерить, но, возясь с разными размерами списков и количеством точек, я обнаружил, что точки группируются вокруг вертикальных линий с интервалом, кратным 0,001 с, что для меня очень странно. Я мог видеть несколько горизонтальных линий, образующихся из-за внутренней работы Python, но не вертикальных. Я даже использовал time.time_ns(), чтобы добиться еще большей точности времени, но это все равно происходит.
Я имею в виду, как может потребоваться одно и то же время, чтобы найти 539 и 94,598 внутри [0,1, ... 100000] список, если он всегда начинается с 0?

Не стесняйтесь попробовать код самостоятельно.
Надеюсь, я не нашел Я не напутал чего-то явно очевидного.
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-operator
Мобильная версия