Python 3中list()和[ ]的区别

qni6mghb  于 2023-03-31  发布在  Python
关注(0)|答案(5)|浏览(237)

此问题在此处已有答案

What's the difference between list() and [] [duplicate](3个答案)
两年前关闭了。
在Python 3中初始化list时,list()[]之间有什么区别吗?

lskq00tm

lskq00tm1#

由于list()是一个 * 函数,它返回 * list * 对象 *,而[]是 * 列表对象本身 *,第二种形式更快,因为它不涉及函数调用:

> python3 -m timeit 'list()'
10000000 loops, best of 3: 0.0853 usec per loop

> python3 -m timeit '[]'
10000000 loops, best of 3: 0.0219 usec per loop

所以如果你真的想找到一个区别,那就是。然而,实际上它们是一样的。

z2acfund

z2acfund2#

它们接近相等;构造函数变量进行函数查找和函数调用;字面量不会-反汇编Python字节码显示:

from dis import dis

def list_constructor():
    return list()

def list_literal():
    return []

print("constructor:")
dis(list_constructor)

print()

print("literal:")
dis(list_literal)

这输出:

constructor:
  5           0 LOAD_GLOBAL              0 (list)
              2 CALL_FUNCTION            0
              4 RETURN_VALUE

literal:
  8           0 BUILD_LIST               0
              2 RETURN_VALUE

至于时间方面:this answer中给出的基准可能会误导某些情况(可能很少见)。例如,与以下内容进行比较:

$ python3 -m timeit 'list(range(7))'
1000000 loops, best of 5: 224 nsec per loop
$ python3 -m timeit '[i for i in range(7)]'
1000000 loops, best of 5: 352 nsec per loop

似乎使用list从生成器构造列表比使用列表解析更快。我假设这是因为列表解析中的for循环是python循环,而相同的循环在list版本的python解释器中的C实现中运行。
还要注意,list可以被重新分配给其他东西(例如,list = int现在的list()将只返回整数0)-但您不能修改[]
虽然这可能是显而易见的...为了完整性:这两个版本具有不同的接口:list接受iterable上的exactls作为参数。它将迭代它并将元素放入新列表中;文字版本不(除了显式列表解析):

print([0, 1, 2])  # [0, 1, 2]
# print(list(0, 1,2))  # TypeError: list expected at most 1 argument, got 3

tpl = (0, 1, 2)
print([tpl])           # [(0, 1, 2)]
print(list(tpl))       # [0, 1, 2]

print([range(3)])      # [range(0, 3)]
print(list(range(3)))  # [0, 1, 2]

# list-comprehension
print([i for i in range(3)])      # [0, 1, 2]
print(list(i for i in range(3)))  # [0, 1, 2]  simpler: list(range(3))
ws51t4hk

ws51t4hk3#

在功能上,它们产生相同的结果,不同的内部Python实现:

import dis

def brackets():
    return []

def list_builtin():
    return list()
print(dis.dis(brackets))
  5           0 BUILD_LIST               0
              2 RETURN_VALUE
print(dis.dis(list_builtin))
 9           0 LOAD_GLOBAL              0 (list)
              2 CALL_FUNCTION            0
              4 RETURN_VALUE
vhipe2zx

vhipe2zx4#

让我们举个例子:

A = ("a","b","c")
B = list(A)
C = [A]

print("B=",B)
print("C=",C)

# list is mutable:
B.append("d")
C.append("d")

## New result
print("B=",B)
print("C=",C)

Result:
B= ['a', 'b', 'c']
C= [('a', 'b', 'c')]

B= ['a', 'b', 'c', 'd']
C= [('a', 'b', 'c'), 'd']

基于这个例子,我们可以说:**[ ]不尝试将元组转换为元素列表,而list()**是尝试将元组转换为元素列表的方法。

0aydgbwb

0aydgbwb5#

list()方法接受序列类型并将其转换为列表。这用于将给定的元组转换为列表。

sample_touple = ('a', 'C', 'J', 13)
list1 = list(sample_touple)
print ("List values ", list1)

string_value="sampletest"
list2 = list(string_value)
print ("List string values : ", list2)

输出:

List values  ['a', 'C', 'J', 13]                                                                                                                              
List string values :  ['s', 'a', 'm', 'p', 'l', 'e', 't', 'e', 's', 't']

其中[]直接声明为列表

sample = [1,2,3]

相关问题