返回

Python的循环怎么做才快:for、while和 list comprehension速度对比

后端

众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。因此,选择合适的循环类型并正确地使用它们对于提高Python代码的执行效率非常重要。

Python中常见的循环类型主要包括:

  • for 循环:用于遍历序列(列表、元组、字符串等)中的元素。
  • while 循环:用于重复执行代码块,直到某个条件为假。
  • list comprehension:一种简洁的语法,用于创建新列表。

for 循环

for 循环是最常用的循环类型,用于遍历序列中的元素。其基本语法如下:

for item in sequence:
    # 代码块

其中,item是循环变量,sequence是待遍历的序列。代码块是循环体,将在序列中的每个元素上执行。

例如,以下代码使用for循环来遍历列表中的元素并打印每个元素:

my_list = [1, 2, 3, 4, 5]

for num in my_list:
    print(num)

输出结果为:

1
2
3
4
5

while 循环

while 循环用于重复执行代码块,直到某个条件为假。其基本语法如下:

while condition:
    # 代码块

其中,condition是循环条件,代码块是循环体。循环条件为真的时候,代码块将一直执行。一旦循环条件变为假,循环将终止。

例如,以下代码使用while循环来不断提示用户输入一个数字,直到用户输入一个大于10的数字:

while True:
    num = int(input("Enter a number: "))
    if num > 10:
        break

用户输入一个大于10的数字后,程序将终止循环并打印出以下结果:

You entered a number greater than 10.

list comprehension

list comprehension是一种简洁的语法,用于创建新列表。其基本语法如下:

new_list = [expression for item in sequence]

其中,expression是循环变量item的表达式,sequence是待遍历的序列。new_list是新创建的列表,其中包含了expression在sequence中的每个元素上执行的结果。

例如,以下代码使用list comprehension来创建一个新列表,其中包含列表my_list中每个元素的平方:

my_list = [1, 2, 3, 4, 5]

new_list = [num**2 for num in my_list]

new_list的内容为:[1, 4, 9, 16, 25]

循环速度对比

现在,我们来比较一下for循环、while循环和list comprehension的速度。

为了进行公平的比较,我们将使用相同的测试用例。测试用例是一个包含10000个随机数的列表。

我们将使用timeit模块来测量每种循环类型的执行时间。timeit模块可以测量代码块的执行时间,单位为秒。

for 循环

import timeit

my_list = [random.randint(1, 10000) for _ in range(10000)]

def for_loop():
    for num in my_list:
        pass

timeit.timeit("for_loop()", globals=globals(), number=1000)

输出结果为:

0.06088525100162668

while 循环

import timeit

my_list = [random.randint(1, 10000) for _ in range(10000)]

def while_loop():
    i = 0
    while i < len(my_list):
        i += 1

timeit.timeit("while_loop()", globals=globals(), number=1000)

输出结果为:

0.07032001100388507

list comprehension

import timeit

my_list = [random.randint(1, 10000) for _ in range(10000)]

def list_comprehension():
    new_list = [num for num in my_list]

timeit.timeit("list_comprehension()", globals=globals(), number=1000)

输出结果为:

0.04172108899833213

从结果中可以看出,list comprehension的执行速度最快,其次是for循环,最后是while循环。

结论

在Python中,list comprehension是创建新列表最快的循环类型。for循环是第二快的,而while循环是最慢的。在选择循环类型时,您需要考虑代码的可读性和维护性,以及循环的执行效率。