Почему цикл while занимает больше времени, чем цикл for? - PullRequest
0 голосов
/ 12 февраля 2019

Редактировать: я сделал, как было сказано в некоторых комментариях, и проводил тест больше раз.Оказывается, после запуска их 10000 раз цикл while немного быстрее, что имело бы смысл.Мой плохой.

Я написал две функции с наименьшим общим знаменателем в Python, одну с помощью цикла for и три импорта, а другую с использованием цикла while и одного импорта.

# for loop
import sys
import operator as op
import functools as ft

def lcd(nums):
    if len(nums) < 2:
        return("Error: must be at least 2 numbers")
    elif 0 in nums:
        return("Error: cannot contain 0")
    else:
        nums = list(map(lambda x: abs(x), nums))
        highestLCD = ft.reduce(op.mul, nums) # multiply all nums together
        for i in range(max(nums),highestLCD,max(nums)):
            if all(i % n == 0 for n in nums):
                return i
        return highestLCD

if __name__ == "__main__":
    print(lcd([int(n) for n in sys.argv[1:]]))
# while loop
import sys

def lcd(nums):
    if len(nums) < 2:
        return("Error: must be at least 2 numbers")
    elif 0 in nums:
        return("Error: cannot contain 0")
    else:
        i = m = max(nums)
        while True:
            if all(i % n == 0 for n in nums):
                return i
            i += m

if __name__ == "__main__":
    print(lcd([int(n) for n in sys.argv[1:]]))

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

Однако, после выполнения их обоих 1000 раз, цикл while будет на полсекунды до полной секунды медленнее.

for

real    0m43.808s
user    0m29.016s
sys     0m10.164s
while

real    0m44.892s
user    0m29.528s
sys     0m10.565s

Почему это?

1 Ответ

0 голосов
/ 12 февраля 2019

См. Этот ответ: Почему цикл по диапазону () в Python быстрее, чем при использовании цикла while?

Кажется, что range() делает вещи более эффективными, чем i + = 1,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...