【问题标题】:python: combine 2 ordered lists into list of tuplespython:将2个有序列表组合成元组列表
【发布时间】:2016-07-06 17:33:30
【问题描述】:

我有 2 个列表,我想将它们组合成一个元组列表,以便保持顺序并且 result[i](first[i], second[i])。假设这两个列表将始终具有相同的大小。有没有办法使用列表理解来做到这一点?比如:

>>> first = [1,2,3]
>>> second = [4,5,6]
>>> combine(first, second)
[(1,4), (2,5), (3,6)]

我已经尝试了一些方法

[(i,j) for i in first, j in second]
[(i for i in first, j for j in second)]
[(i,j) for i,j in first, second]

这些都不起作用。我只是想知道这是否可能,或者我是否必须使用循环来做到这一点。

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    使用邮编:

    list(zip(first, second))
    Out[384]: [(1, 4), (2, 5), (3, 6)]
    

    【讨论】:

    • 为什么要用list 包装它?在我对zip 的简单使用中,我是否遗漏了一些边缘情况?
    • @Spacedman 在 Python 3 中, zip() 返回一个迭代器而不是一个列表。我添加了它,因此它适用于两个版本。
    • zip 当然可以达到目的,但就问题而言,列表理解是否可能?
    • 您寻找的那种理解(迭代多个列表)通常是用 zip ([(i, j) for (i, j) in zip(first, second)]) 完成的(当然这里没有必要,但你明白了)但你也可以做一些事情像这样[(first[i], second[i]) for i in range(len(first))]
    【解决方案2】:

    Python 有一个功能:

    >>> zip(first, second)
    [(1, 4), (2, 5), (3, 6)]
    

    zippedy-doo-dah

    【讨论】:

      【解决方案3】:

      可以使用内置的zip函数:

      >>> first = [1,2,3]
      >>> second = [4,5,6]
      >>> list(zip(first, second))
      [(1,4), (2,5), (3,6)]
      

      【讨论】:

        【解决方案4】:
        >>> first = [1,2,3]
        >>> second = [4,5,6]
        >>> list =zip(first,second)
        >>> list
        [(1, 4), (2, 5), (3, 6)]
        

        或者也用于列表而不是元组,使用 numpy

        >>> lista = [first,second]
        >>> import numpy as np
        >>> np.array(lista)
        array([[1, 2, 3],
               [4, 5, 6]])
        >>> np.array(lista)[:,0]
        array([1, 4])
        >>> np.array(lista)[:,1]
        array([2, 5])
        >>> np.array(lista)[:,2]
        array([3, 6])
        

        【讨论】:

          【解决方案5】:

          使用 izip:

          >>> first = [1,2,3]
          >>> second = [4,5,6]
          
          >>> from itertools import izip
          >>> gen = izip(first, second)
          >>> [(i, j) for i, j in gen]
          [(1, 4), (2, 5), (3, 6)]
          

          【讨论】:

            猜你喜欢
            • 2015-10-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-08-18
            • 1970-01-01
            • 2022-06-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多