我知道它们本质上是相同的,但是就风格而言,哪一个更好(更 Python 化) ,用来创建一个空列表或者结果?
在我看来,[]和 {}是创建空列表/字典的最简洁和可读的方法。
[]
{}
不过,要对 set()保持警惕,例如:
set()
this_set = {5} some_other_set = {}
可能会让人困惑。第一个创建了一个包含一个元素的集合,第二个创建了一个空 dict 和一个 没有集合。
就速度而言,它没有空列表/词典的竞争:
>>> from timeit import timeit >>> timeit("[]") 0.040084982867934334 >>> timeit("list()") 0.17704233359267718 >>> timeit("{}") 0.033620194745424214 >>> timeit("dict()") 0.1821558326547077
对于非空的:
>>> timeit("[1,2,3]") 0.24316302770330367 >>> timeit("list((1,2,3))") 0.44744206316727286 >>> timeit("list(foo)", setup="foo=(1,2,3)") 0.446036018543964 >>> timeit("{'a':1, 'b':2, 'c':3}") 0.20868602015059423 >>> timeit("dict(a=1, b=2, c=3)") 0.47635635255323905 >>> timeit("dict(bar)", setup="bar=[('a', 1), ('b', 2), ('c', 3)]") 0.9028228448029267
此外,使用括号符号可以使用 list 和 dictionary 理解,这可能是足够的理由。
恕我直言,使用 list()和 dict()使您的 Python 看起来像 C。
list()
dict()
由于字节码比较短,所以字节码可能比 很小快一点:
In [1]: import dis In [2]: a = lambda: {} In [3]: b = lambda: dict() In [4]: dis.dis(a) 1 0 BUILD_MAP 0 3 RETURN_VALUE In [5]: dis.dis(b) 1 0 LOAD_GLOBAL 0 (dict) 3 CALL_FUNCTION 0 6 RETURN_VALUE
这同样适用于 list和 []
list
在[]和 list ()之间的区别的情况下,有一个我没有看到其他人指出的陷阱。 如果你使用一本字典作为列表的一部分,这两者会得到完全不同的结果:
In [1]: foo_dict = {"1":"foo", "2":"bar"} In [2]: [foo_dict] Out [2]: [{'1': 'foo', '2': 'bar'}] In [3]: list(foo_dict) Out [3]: ['1', '2']
在[]和 list ()之间有一个不同的行为,如下面的例子所示。如果我们想要返回数字列表,我们需要使用 list () ,否则我们会得到一个 map 对象!不知道该怎么解释。
sth = [(1,2), (3,4),(5,6)] sth2 = map(lambda x: x[1], sth) print(sth2) # print returns object <map object at 0x000001AB34C1D9B0> sth2 = [map(lambda x: x[1], sth)] print(sth2) # print returns object <map object at 0x000001AB34C1D9B0> type(sth2) # list type(sth2[0]) # map sth2 = list(map(lambda x: x[1], sth)) print(sth2) #[2, 4, 6] type(sth2) # list type(sth2[0]) # int
小心 list()和 []的工作方式不同:
>>> def a(p): ... print(id(p)) ... >>> for r in range(3): ... a([]) ... 139969725291904 139969725291904 139969725291904 >>> for r in range(3): ... a(list()) ... 139969725367296 139969725367552 139969725367616
list()总是在堆上创建一个新对象,但是 []可以在许多情况下重用内存单元。
方括号对表示列表对象或索引下标之一,如 my_List[x]。
my_List[x]
花括号对表示字典对象。
a_list = ['on', 'off', 1, 2] a_dict = { on: 1, off: 2 }
List ()和[]之间没有这样的区别,但是如果将它与迭代器一起使用,它会给我们:
Nums = [1,2,3,4,5,6,7,8]
In: print ([ iter (nums)])
Out: [ < list _ iterator object at 0x03E4CDD8 > ]
输入: print (list (iter (nums)))
输出: [1,2,3,4,5,6,7,8]
list()和 []之间的区别没有被任何人提到,是 list()将转换成一个列表,例如一个元组。[]会把这个元组放到一个列表中:
a_tuple = (1, 2, 3, 4) test_list = list(a_tuple) # returns [1, 2, 3, 4] test_brackets = [a_tuple] # returns [(1, 2, 3, 4)]
list()和 []的另一个区别
list_1 = ["Hello World"] # is a list of the word "Hello World" list_2 = list("Hello World") # is a list of letters 'H', 'e', 'l'...
要记住..。