将集合转换为列表时list()与[]之间的差异

时间:2017-04-04 02:25:56

标签: python python-3.x types

我读到使用list()调用函数的“类型转换”,而只使用方括号[]调用字面意义[]更快。

但我最近发现除了速度之外还有更多的差异。我有一个字典,其中键是整数,值是我做的一些对象,其中对象有一个对应于大学名称的字符串。

我想要独特的大学名字,所以我(自豪地,希望用Python!)写道:

[set([entry[1].school for entry in entries.items()])]

但是这会创建一个单个元素的列表,该元素就是一个集合。这不同于:

list(set([entry[1].school for entry in entries.items()]))

返回一个字符串列表 - 我对第一个字符串的期望。

有人可以解释这两行之间究竟发生了什么吗?

1 个答案:

答案 0 :(得分:4)

list(x)正在将x转换为list,而[x]正在创建一个包含单个成员的新列表(x

>>> list('test')
['t', 'e', 's', 't']
>>> ['test']
['test']

list comprehensions有特殊语法,其中列表中包含for表达式

squares = [x**2 for x in range(10)]

但它并没有真正输入。

关于集合转换list(set(...)),这会创建一个新列表,但会通过遍历集合来获取成员。

>>> set('test')
set(['s', 'e', 't']) # a test set
>>> list(set('test'))
['s', 'e', 't'] # create a list with members from set
>>> [set('test')]
[set(['s', 'e', 't'])] # create a list with a single member (which is the test set itself)