【问题标题】:Getting the first elements per row in an array in Python?在Python中获取数组中每行的第一个元素?
【发布时间】:2010-01-13 04:31:02
【问题描述】:

假设我有一个元组数组,s,形式为:

s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))

我想返回另一个元组 t,它由每行的第一个元素组成:

t = (1, 2, 3)

哪种方法最有效?我当然可以只遍历 s,但是有什么更巧妙的方法吗?

【问题讨论】:

    标签: python tuples


    【解决方案1】:

    没有。

    t = tuple(x[0] for x in s)
    

    【讨论】:

      【解决方案2】:

      Ignacio 给出的列表推导方法是最干净的。

      只是为了好玩,你也可以这样做:

      zip(*s)[0]
      

      *ss 扩展为参数列表。所以相当于

      zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))
      

      zip 返回n 元组,其中每个元组包含每个列表中的nth 项。

      【讨论】:

      • 其实这是一个生成器表达式,而不是列表推导式。
      【解决方案3】:
      import itertools
      s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
      print(next(itertools.izip(*s)))
      

      itertools.izip 返回一个迭代器。 next 函数从迭代器返回下一个(在本例中为第一个)元素。

      在 Python 2.x 中,zip 返回一个元组。 izip 使用更少的内存,因为迭代器在需要之前不会生成它们的内容。

      在 Python 3 中,zip 返回一个迭代器。

      【讨论】:

        猜你喜欢
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        • 2021-03-06
        • 1970-01-01
        • 2019-05-20
        • 1970-01-01
        • 2017-08-14
        • 1970-01-01
        相关资源
        最近更新 更多