在 Python 中创建列表时,应该写 `[]` 还是 `list()`?

简介: 在 Python 中,创建列表有两种方法:使用方括号 `[]` 和调用 `list()` 函数。虽然两者都能创建空列表,但 `[]` 更简洁、高效。性能测试显示,`[]` 的创建速度比 `list()` 快约一倍。此外,`list()` 可以接受一个可迭代对象作为参数并将其转换为列表,而 `[]` 则需要逐一列举元素。综上,`[]` 适合创建空列表,`list()` 适合转换可迭代对象。

在 Python 中,创建列表有两种写法:

python

代码解读

复制代码

# 写法一:使用一对方括号
list_1 = []

# 写法二:调用 list()
list_2 = list()

那么哪种写法更好呢?

单从写法上来看,[] 要比 list() 简洁,那在性能和功能方面,二者又有怎样的差异呢?

使用 [] 创建列表的速度比使用 list()

我们先使用 timeit 来测量一下这两种写法创建 100 万次空列表所花费的时间timeit 是 Python 标准库中的一个模块,常用于测量小段代码的执行时间,非常适合性能测试和比较不同实现的效率。

python

代码解读

复制代码

import timeit

time_list = timeit.timeit('list()', number=1000000)

time_brackets = timeit.timeit('[]', number=1000000)

print(f"list()的耗时: {time_list} 秒")
print(f"[]的耗时: {time_brackets} 秒")

# list()的耗时: 0.04899674400803633 秒
# []的耗时: 0.02433863200712949 秒

我们发现使用 [] 创建列表的速度比使用 list()。那为什么前者的速度更快呢?

我们可以借助 dis 模块,从这两种写法对应的字节码上看一看差别。dis.dis() 函数可以反汇编一段 Python 代码,显示它的字节码指令,以帮助开发者了解 Python 代码在底层是如何执行的。

python

代码解读

复制代码

import dis # pip3 install dis

print("Disassembly of create_list_with_list:")
dis.dis('list()')

print("Disassembly of create_list_with_brackets:")
dis.dis('[]')

这段脚本的运行结果如下:

vbnet

代码解读

复制代码

Disassembly of create_list_with_list:
  0           0 RESUME                   0

  1           2 PUSH_NULL
              4 LOAD_NAME                0 (list)
              6 CALL                     0
             14 RETURN_VALUE
Disassembly of create_list_with_brackets:
  0           0 RESUME                   0

  1           2 BUILD_LIST               0
              4 RETURN_VALUE

由此不难发现,[]list() 执行速度上的差异主要是因为执行的字节码指令不同。

[] 是一个直接生成列表的字面量(literal),只使用 BUILD_LIST 指令即可生成一个空列表。而 list() 是一个生成列表的函数,它需要先使用 LOAD_NAME 指令加载函数,然后通过 CALL 指令调用该函数。这个额外的步骤带来的开销就导致这种写法要比 [] 慢。

除了 dis 模块,也可通过 godbolt.org/z/T39KesbPf 这个网站来对比这两种写法的差别:

二者在功能上的差异

[]list() 都能创建空的列表,但在创建含有元素的列表时,二者的用法有所不同。

list() 可以接受一个(且只能是一个)可迭代对象作为参数,并将其转换为列表:

python

代码解读

复制代码

# 从可迭代对象创建列表
list_from_tuple = list((1, 2, 3)) # [1, 2, 3]
list_from_string = list("hello")  # ['h', 'e', 'l', 'l', 'o']
list_from_dict_keys = list({"a": 1, "b": 2}.keys()) # ['a', 'b']

而在使用 [] 创建非空列表时,需要一一列举出其中的元素:

python

代码解读

复制代码

list_nums = [1, 2, 3]
list_letters = ["a", "b", "c", "d"]

[] 不能直接将可迭代对象转换为列表。


综上所述,当需要创建一个空列表时,[] 是更简洁和高效的选择。而当需要将可迭代对象转换为列表时,就需要使用 list() 了。


原文地址:https://juejin.cn/post/7384998829840973875

相关文章
|
2天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
20 9
|
10天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
22 14
|
28天前
|
大数据 UED
「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
List 和 Grid 是鸿蒙开发中的核心组件,用于展示动态数据。List 适合展示垂直或水平排列的数据列表,而 Grid 则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。
61 9
「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
|
12天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
28 10
|
29天前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
1月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
1月前
|
索引 Python
List(列表)
List(列表)。
41 4
|
1月前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
1月前
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
197 2
|
1月前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
23 0
下一篇
DataWorks