【问题标题】:Take values in a tuple list and put in another list?在一个元组列表中取值并放入另一个列表?
【发布时间】:2017-09-30 04:19:03
【问题描述】:

假设我有一个元组列表。我想将所有元组的第二个元素放在他们自己的列表中,同时保留原始顺序。有什么快速而肮脏的方法吗?

排序前的示例。

[(0,'apple'),
(1,'pineapple'),
(11,'cherry'),
(12,'banana'),
(13,'mango'),
(14,'boot'),
(15,'mangosteen')]

排序后

['apple',
'pineapple',
'cherry',
'banana',
'mango',
'boot',
'mangosteen']

【问题讨论】:

    标签: python python-3.x list tuples


    【解决方案1】:

    您基本上只需要映射在列表中每个元组的索引 1 处获取元素的操作并生成一个新列表。

    给定:

    >>> LoT
    [(0, 'apple'), (1, 'pineapple'), (11, 'cherry'), (12, 'banana'), (13, 'mango'), (14, 'boot'), (15, 'mangosteen')]
    

    您可以使用列表推导并访问每个元组感兴趣的元素:

    >>> [t[1] for t in LoT]
    ['apple', 'pineapple', 'cherry', 'banana', 'mango', 'boot', 'mangosteen']
    

    您可以使用元组解包:

    >>> [b for _,b in LoT]
    ['apple', 'pineapple', 'cherry', 'banana', 'mango', 'boot', 'mangosteen']
    

    如果元组的长度不是 2 个元素,则失败。

    或者,您可以使用zip

    >>> list(zip(*LoT))[1]
    ('apple', 'pineapple', 'cherry', 'banana', 'mango', 'boot', 'mangosteen')
    

    您可以将itemgettermap 一起使用:

    >>> list(map(itemgetter(1),LoT))
    ['apple', 'pineapple', 'cherry', 'banana', 'mango', 'boot', 'mangosteen']
    

    对于 Python3,您需要在 zip 周围使用 list 来为第一个元素下标,或者在 map 周围使用来显示它。结合 Python 3 中的循环或其他流控制,您可能不需要它。

    第一个[t[1] for t in LoT] 是最惯用的,最后一个map(itemgetter(1),LoT) 可能是最快的。

    【讨论】:

    • 这个数据结构叫什么?当我插入“t [1] for t in LoT”时,我的控制台说它是一个生成器类型。
    • 将我所做的完全放入控制台,这应该可以工作。然后从那里向后工作到你的用例。您需要使用[...] 来获得列表理解。
    • 我做到了,它有效,我想知道将来如何参考。萝卜说叫“元组拆包”?
    • 假设你有t=(1,2)并且你想访问2。您可以使用t[1] 访问第二个元素(方括号是该元组的切片或索引),或者您可以将元组解压缩为命名值:a,b=t,第二个元素将分配给b。这样做有好处也有坏处。如果您的元组长度不完全是 2 个元素,则 a,b=t 是一个错误。 [] 是 Python 中的一个运算符,对应于 _getitem_ 方法。
    【解决方案2】:

    元组解包作为一种替代方法。

    [b for a,b in lst]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多