【问题标题】:How to slice a list of tuples in python?如何在python中切片元组列表?
【发布时间】:2016-02-23 02:37:16
【问题描述】:

假设:

L = [(0,'a'), (1,'b'), (2,'c')]

如何获取每个tuple的索引0作为伪装结果:

[0, 1, 2]

为此,我使用了python list comprehension 并解决了问题:

[num[0] for num in L]

不过,它必须是一种 Python 的方式来 L[:1] 一样对其进行切片,但这种切片当然不起作用。

有更好的解决方案吗?

【问题讨论】:

  • 列表理解解决方案有什么问题?
  • 我会说您的列表理解解决方案最好的方法。
  • 列表理解对我来说似乎非常好。这是一个更糟糕的选择:from operator import itemgetter; map(itemgetter(0), lst).
  • @Nhor,LC 工作,[0, 1, 2] 是它的输出
  • 不要打电话给你的名单listlist 是类型的名称。

标签: python list python-2.7 list-comprehension slice


【解决方案1】:

你可以使用*解包和zip()

>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> for item in zip(*l)[0]:
...     print item,
...
0 1 2

对于 Python 3,zip() 不会自动生成 list,因此您必须将 zip 对象发送到 list() 或使用 next(iter()) 或其他东西:

>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> print(*next(iter(zip(*l))))
0 1 2

但你的已经很好了。

【讨论】:

  • 请注意,OP 用 2.7 标记了问题,因此他们只需要:zip(*l)[0]
【解决方案2】:

您可以将其转换为 numpy 数组。

import numpy as np
L = [(0,'a'), (1,'b'), (2,'c')]
a = np.array(L)
a[:,0]

【讨论】:

    【解决方案3】:

    您的解决方案对我来说似乎是最 Pythonic 的;你也可以这样做

    tuples = [(0,'a'), (1,'b'), (2,'c')]
    print zip(*tuples)[0]
    

    ...但对我来说这太“聪明”了,列表理解版本更清晰。

    【讨论】:

    • 命名你的变量list遮蔽内置list
    • 但是 OP 先做到了! 疯狂编辑我不知道你在说什么,好心的先生。
    【解决方案4】:

    map 呢?

    map(lambda (number, letter): number, L)
    

    在 python 2 中切片

    map(lambda (number, letter): number, L)[x:y]
    

    在 python 3 中,您必须先将其转换为列表:

    list(map(lambda (number, letter): number, L))[x:y]
    

    【讨论】:

      【解决方案5】:
      >>> list = [(0,'a'), (1,'b'), (2,'c')]
      >>> l = []
      >>> for t in list:
              l.append(t[0])
      

      【讨论】:

        猜你喜欢
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 2014-02-03
        • 2018-04-05
        • 2018-08-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多