首页 > 编程笔记 > Python笔记

Python元组推导式

元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。

元组推导式的语法格式如下:

(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )

其中,用 [] 括起来的部分,可以使用,也可以省略。

通过和列表推导式做对比,你会发现,除了元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是 [],其它完全相同。不仅如此,元组推导式和列表推导式的用法也完全相同。

例如,我们可以使用下面的代码生成一个包含数字 1~9 的元组:
a = (x for x in range(1,10))
print(a)
运行结果为:

<generator object <genexpr> at 0x0000020BAD136620>


从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象(后续会介绍),这一点和列表推导式是不同的。

如果我们想要使用元组推导式获得新元组或新元组中的元素,有以下三种方式:
  1. 使用 tuple() 函数,可以直接将生成器对象转换成元组,例如:
    a = (x for x in range(1,10))
    print(tuple(a))
    运行结果为:
    (1, 2, 3, 4, 5, 6, 7, 8, 9)
  2. 直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:
    a = (x for x in range(1,10))
    for i in a:
        print(i,end=' ')
    print(tuple(a))
    运行结果为:

    1 2 3 4 5 6 7 8 9 ()

  3. 使用 __next__() 方法遍历生成器对象,也可以获得各个元素,例如:
    a = (x for x in range(3))
    print(a.__next__())
    print(a.__next__())
    print(a.__next__())
    a = tuple(a)
    print("转换后的元组:",a)
    运行结果为:

    0
    1
    2
    转换后的元组: ()


注意,无论是使用 for 循环遍历生成器对象,还是使用 __next__() 方法遍历生成器对象,遍历后原生成器对象将不复存在,这就是遍历后转换原生成器对象却得到空元组的原因。

所有教程

优秀文章