【问题标题】:How to extract first items from a list of tuples [duplicate]如何从元组列表中提取第一项[重复]
【发布时间】:2010-07-29 22:23:01
【问题描述】:

我有一个相当大的元组列表,其中包含:

[('and', 44023), ('cx', 37711), ('is', 36777), ...]

我只想提取第一个字符串,所以上面列表的输出是:

and
cx
is

我如何编码(在某种程度上内置了可扩展性)?

【问题讨论】:

    标签: python list tuples


    【解决方案1】:
    [tup[0] for tup in mylist]
    

    这使用列表推导。您也可以使用括号而不是外括号来使其成为生成器理解,因此评估会很懒惰。

    【讨论】:

    • +1 获取关于生成器理解的注释。不知道它是这样工作的。
    • -1 用于生成器。这打破了 Python 近一半的禅宗:python -c 'import this'
    • @bukzor 我相信添加外括号会明确使它成为一个生成器(没有人在你背后做它)。
    • 使用生成器而不是列表推导式与显式或隐式有什么关系?
    • @orangeoctopus 我的评论参考了 bukzor 在编辑之前的评论。我认为上面的解决方案是明确的和 pythonic 的。
    【解决方案2】:

    只是为 Matthew 提供解决方案的另一种方法。

    tuples = [('and', 44023), ('cx', 37711), ('is', 36777) .... ]
    strings, numbers = zip(*tuples)
    

    如果您在某个时候决定希望将元组的两个部分放在不同的序列中(避免两个列表推导式)。

    【讨论】:

    • 如果您的列表确实很大,请注意这会使您的内存需求加倍。
    【解决方案3】:

    如果你想得到准确的输出

    and
    cx
    is
    

    然后使用列表推导结合字符串join 方法像这样加入换行符

    yourList = [('and', 44023), ('cx', 37711), ('is', 36777)]
    print '\n'.join([tup[0] for tup in yourList])
    

    【讨论】:

      【解决方案4】:

      您可以在 for 循环中解压缩元组,如下所示:

      for word, count in mytuple:
          print "%r is used %i times!" % (word, count)
      

      您可以在 Python 文档中看到它被广泛使用: http://docs.python.org/tutorial/datastructures.html#looping-technique

      【讨论】:

        猜你喜欢
        • 2020-09-15
        • 2017-04-20
        • 2011-03-19
        • 2018-02-07
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 1970-01-01
        相关资源
        最近更新 更多