【问题标题】:Python get N elements from a list at a time using lambdaPython使用lambda一次从列表中获取N个元素
【发布时间】:2011-07-18 00:12:03
【问题描述】:

想象一下我有一个这样的列表:

a = [1,2,3,4,5,6]

使用 lambda 函数,我想一次返回两个元素,所以结果是:

res = [[1,2], [2,3], [3,4], [4,5], [5,6]]

有什么建议吗?

【问题讨论】:

标签: python list lambda


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

对于任意n

>>> n = 3
>>> zip(*(a[i:] for i in range(n)))
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6)]

【讨论】:

    【解决方案2】:
    >>> import itertools
    >>> itertools.izip(a, itertools.islice(a,1,None))
    

    这样可以避免创建原始列表的副本,如果它非常大,这可能是相关的。

    【讨论】:

      【解决方案3】:
      >>> map(lambda i:a[i:i+2], range(len(a)-1))
      [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
      

      【讨论】:

      • 与我的其他答案(我刚刚删除)相同。 +1 使用他要求的 lambda
      • 虽然有人问过,但这对 lambda 的使用非常糟糕。
      • @JBernardo,我想好处是它适用于 Python1.5 :)
      【解决方案4】:

      一个选项:

      a = [1, 2, 3, 4, 5, 6]
      [a[i:i+2] for i in range(len(a)-1)] # => [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
      

      【讨论】:

        【解决方案5】:

        我建议使用生成器。

        >>> a = [1,2,3,4,5,6]
        >>>  g=([a[i:i+2]] for i in range(len(a)-1))
        

        如果需要,您可以随时获取列表:

        >>> list(g)
        [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
        

        【讨论】:

          猜你喜欢
          • 2011-05-12
          • 1970-01-01
          • 1970-01-01
          • 2021-11-23
          • 1970-01-01
          • 2015-02-10
          • 1970-01-01
          • 1970-01-01
          • 2013-12-05
          相关资源
          最近更新 更多