Почему range отрабатывает по разному

Кто может помочь и объяснить почему это range из первого варианта отрабатывает не так, как во втором. Ведь логика практически одна и та же. Я исключаю 0 индекс и увеличиваю значение на 1, что бы стало 1000.

вариант 1

maxlen = 1001
res = 0
for i in range(1, maxlen):
    if i % 3 == 0 or i % 5 == 0:
        res += i
print(res)

вариант 2

result = sum([x for x in range(1000) if (x%3==0 or x%5==0)])
print(result)

результаты

234168
233168

Ответы (1 шт):

Автор решения: CrazyElf

Число 1000 подпадает под условие if i % 3 == 0 or i % 5 == 0, соответственно в сумму оно в первом случае попадает, а во втором нет, поскольку range выдаёт числа исключая верхнюю границу.

Тут 1000 попадает в цикл:

maxlen = 1001
for i in range(1, maxlen):

А тут не попадает:

x for x in range(1000)

Количество перебираемых элементов в обоих случаях одинаковое, а вот сами элементы - разные.

→ Ссылка