将float的元组1的列表转换为int

时间:2019-05-27 14:10:17

标签: python python-3.x list dictionary tuples

查询数据库后,得到以下格式的结果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])给了我第三个元素,依此类推,但是我如何“工业化”这个吗?

3 个答案:

答案 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是最慢的。由于列表理解是一种简洁的书写方式,不需要导入,因此这是我在这里选择的解决方案。