Python的循环怎么做才快:for、while和 list comprehension速度对比
2023-09-25 06:30:34
众所周知,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循环是最慢的。在选择循环类型时,您需要考虑代码的可读性和维护性,以及循环的执行效率。