【问题标题】:Pairwise appending in python without ZIP [duplicate]在没有ZIP的python中成对追加[重复]
【发布时间】:2015-09-21 21:41:39
【问题描述】:

我目前正在学习 Python 中的列表理解。我将如何执行以下操作:

l1 = [2,4,6,8]
l2 = [2,3,4,5]
l = [*some list comprehension*]

这样

l = [[2,2],[4,3],[6,4],[8,5]]

编辑:我可以在没有 zip 的情况下执行此操作吗?

【问题讨论】:

  • 为了让你更简单[[i,j] for i,j in zip(l1,l2)]
  • 当然你可以不使用zip,但使用[[l1[i],l2[i]] for i in range(len(l1))] 是一种非常糟糕的方式... ;)
  • 那么使用 zip 是一种好的编程习惯吗?另外,列表理解是好的编程习惯吗?
  • 当然。为什么会有疑问?
  • 你也可以用enumerate()代替range()

标签: python list functional-programming


【解决方案1】:

你想要zip 函数。

例子-

>>> l1 = [2,4,6,8]
>>> l2 = [2,3,4,5]
>>>
>>> l = list(zip(l1,l2))
>>> l
[(2, 2), (4, 3), (6, 4), (8, 5)]

如果您希望内部列表的类型为 list 而不是元组 -

>>> l = [list(x) for x in zip(l1,l2)]
>>> l
[[2, 2], [4, 3], [6, 4], [8, 5]]

在 python 3.x 中,zip 返回一个迭代器,所以如果你不想要一个列表,而只是想遍历每个组合(压缩)的元素,你可以直接使用 - zip(l1,l2)

正如问题中所问的那样,要在没有zip 函数的情况下执行此操作,您可以使用enumerate 函数从一个列表中获取索引以及元素,然后使用索引从第二个列表中获取元素列表。

>>> l = [[x,l2[i]] for i,x in enumerate(l1)]
>>> l
[[2, 2], [4, 3], [6, 4], [8, 5]]

但是除非两个列表的大小相同,否则这将不起作用。也不确定为什么要在没有 zip 的情况下这样做。

【讨论】:

    【解决方案2】:

    使用列表理解和zip:

    >>> l1 = [2, 4, 6, 8]
    >>> l2 = [2, 3, 4, 5]
    >>> [[x, y] for x, y in zip(l1, l2)]
    [[2, 2], [4, 3], [6, 4], [8, 5]]
    

    【讨论】:

      【解决方案3】:

      你可以使用zip作为

      >>> l1 = [2,4,6,8]
      >>> l2 = [2,3,4,5]
      >>> zip(l1,l2)
      [(2, 2), (4, 3), (6, 4), (8, 5)]
      >>> [ list(x) for x in zip(l1,l2) ]
      [[2, 2], [4, 3], [6, 4], [8, 5]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 2019-04-06
        • 1970-01-01
        相关资源
        最近更新 更多