我读到使用list()
调用函数的“类型转换”,而只使用方括号[]
调用字面意义[]
更快。
但我最近发现除了速度之外还有更多的差异。我有一个字典,其中键是整数,值是我做的一些对象,其中对象有一个对应于大学名称的字符串。
我想要独特的大学名字,所以我(自豪地,希望用Python!)写道:
[set([entry[1].school for entry in entries.items()])]
但是这会创建一个单个元素的列表,该元素就是一个集合。这不同于:
list(set([entry[1].school for entry in entries.items()]))
返回一个字符串列表 - 我对第一个字符串的期望。
有人可以解释这两行之间究竟发生了什么吗?
答案 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)