查询数据库后,得到以下格式的结果r
:
r = [(123.0,), (456.0,), (789.0,)]
这是tuple
的列表,每个列表都有一个项,即float
(实际上是int
)。
我想将其转换为set
的{{1}}:
int
我希望这是一个琐碎的s = {123, 456, 789}
,但我似乎无法编写它。如何告诉map()
我要取元组的第一个元素?
我知道map()
给了我int(r[0][0])
的第一个元素,set
给了第二个元素,int(r[1][0])
给了我第三个元素,依此类推,但是我如何“工业化”这个吗?
答案 0 :(得分:3)
您可以这样做:
result = {int(x[0]) for x in r}
如果您想使用完整的map
忍者:
In [1]: import operator
In [2]: set(map(int, map(operator.itemgetter(0), r)))
Out[2]: {123, 456, 789}
答案 1 :(得分:1)
使用map
:
set(map(lambda x: int(x[0]), r))
答案 2 :(得分:0)
我的程序在单独的数据库上执行2个查询的2个作业(以比较结果):第一个作业的查询返回35694726记录(列表中的元组)。 第二项工作产生47,176,395个元组(在两个列表中)。
总共有4个要转换的大列表,使您对解决方案的相对速度有所了解。
所有3个解决方案均产生两组35,694,726件,分别为47,176,395件。好吧。
在每个解决方案中,第一个查询结果的处理速度都比第二个要快。我猜一个比另一个更好吗?
在此下面,结果为“ 16.5 / 20.4 / 25.8 / 36.7”表示第一个元组列表在16.5秒内转换为一组,第二个元组用了20.4秒,第三个花了25.5秒,最后是36.7秒。 / p>
Operator Lib Function : 16.5/20.4/25.8/36.7
Using List Comprehension: 16.3/20.8/28.3/37.0
Map+Lambda : 17.8/22.0/30.8/38.8
所以 有所不同,但差别不大。 (当前执行的)查询需要5分钟,因此,总的来说,几秒钟没有什么大不同。
如上所述,Map + Lambda是最慢的。由于列表理解是一种简洁的书写方式,不需要导入,因此这是我在这里选择的解决方案。