代码之家  ›  专栏  ›  技术社区  ›  Peter Smit

如何只迭代元组的第一个变量

  •  5
  • Peter Smit  · 技术社区  · 15 年前

    在Python中,当您有元组列表时,可以对它们进行迭代。例如,当您有三维点时:

    for x,y,z in points:
        pass
        # do something with x y or z
    

    如果您只想使用第一个变量,或者第一个变量和第三个变量,该怎么办?在python中有没有跳过的符号?

    5 回复  |  直到 15 年前
        1
  •  8
  •   SilentGhost    15 年前

    有什么东西阻止你不去接触你不感兴趣的变量吗?在python中,有一种传统的使用下划线来表示您不感兴趣的变量。例如。:

    for x, _,_ in points:
        print(x)
    

    您需要了解这只是一个惯例,与性能没有关系。

        2
  •  7
  •   unbeli    15 年前

    是,下划线:

    >>> a=(1,2,3,4)
    >>> b,_,_,c = a
    >>> b,c
    (1, 4)
    

    这不完全是“跳过”,只是一个约定。下划线变量仍获取分配的值:

    >>> _
    3
    
        3
  •  5
  •   Mark Byers    15 年前

    一种常见的方法是对未使用的变量使用下划线:

    for x, _, z in points:
        # use x and z
    

    这和你写的没什么不同。下划线和其他变量一样是一个普通变量。但这表明,人们阅读您的代码时并不打算使用该变量。

    不建议在交互式提示中这样做,因为 _ 这里有一个特殊的含义:最后一个run语句/表达式的值。

        4
  •  3
  •   stw_dev    15 年前

    虽然这不像你要求的那么圆滑,但也许这对于你只给你关心的元组索引命名的意图来说是最清晰的:

    for each in points:
        x = each[0]
        # do something with x
    
        5
  •  0
  •   Don O'Donnell    15 年前

    在python 3.1中,可以在元组赋值左侧的标识符前面使用星号,它将吸收剩下的内容。此构造将处理数目可变的元组项。这样地:

    >>> tpl = 1,2,3,4,5
    >>> a, *b = tpl
    >>> a
    1
    >>> b
    >>> (2, 3, 4, 5)
    

    或以各种顺序和组合:

    >>> a, *b, c = tpl
    >>> a
    1
    >>> b
    (2, 3, 4)
    >>> c
    5
    

    因此,对于您询问的案例,如果您只对第一个项目感兴趣,请使用*来吸收和丢弃您不关心的剩余项目:

    >>> a, *_ = tpl
    >>> a
    1