Python列表函数或列表理解

Opp*_*pac 8 python python-3.x

任何人都可以向我解释这两种创建列表方式之间的区别。它们是一样的吗 ?如果不是,我应该使用哪一个?

squares1 = [x**2 for x in range(1, 11)]
squares2 = list(x**2 for x in range(1, 11))
Run Code Online (Sandbox Code Playgroud)

Ind*_*der 8

从以下内容可以看出,它们的性能略有不同:

squares1 = [x**2 for x in range(1, 11)]
Run Code Online (Sandbox Code Playgroud)

每个循环3.07 µs±70 ns(平均±标准偏差,共运行7次,每个循环100000个)

squares2 = list(x**2 for x in range(1, 11))
Run Code Online (Sandbox Code Playgroud)

每个循环3.65 µs±35.6 ns(平均±标准偏差,共运行7次,每个循环100000个)

这可能主要是因为在情况1中,您正在同时迭代并生成列表的值。

在情况2中,您在迭代时生成值,然后在其结束时将其转换为列表,然后将其存储为给定变量。