【问题标题】:Create a list of integers with duplicate values in Python在 Python 中创建具有重复值的整数列表
【发布时间】:2015-10-22 23:33:03
【问题描述】:

这个问题对于 Python 2.7 专家(或爱好者)来说无疑是小菜一碟,所以在这里。

我怎样才能创建一个整数列表,其值在它的原始值旁边是这样重复的?

a = list([0, 0, 1, 1, 2, 2, 3, 3, 4, 4])

这样做真的很容易:

for i in range(10): a.append(int(i / 2))

但我宁愿将它放在一个简单的行中,以 = 所需的输出开始。

感谢您抽出宝贵时间回答。

PS。 “可能已经有你答案的问题都不是我想要的。

【问题讨论】:

    标签: python list python-2.7 integer


    【解决方案1】:
    >>> [i//2 for i in xrange(10)]
    [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
    

    一个简单的通用方法:

    >>> f = lambda rep, src: reduce(lambda l, e: l+rep*[e], src, [])
    >>> f(2, xrange(5))
    [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
    >>> f(3, ['a', 'b'])
    ['a', 'a', 'a', 'b', 'b', 'b']
    

    【讨论】:

    • 本来打算在 Python 3 中添加 [int(i/2) for i in range(10)],但问题是针对 2.7,所以添加为评论。
    • 2.7 和 3.0 不能都使用i//2 吗?
    • 很公平,我没想到。
    【解决方案2】:
    >>> sorted(2*range(5))
    [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
    

    【讨论】:

      【解决方案3】:

      这是一种适用于任何列表的技术,而不仅仅是int 列表,并且不依赖于(相对)昂贵的sorted() 函数。它还允许您指定重复次数。

      首先,解决OP中问题的简单版本:

      print [u for v in [[i,i] for i in range(5)] for u in v]
      

      输出

      [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
      

      现在是花哨(但可读性稍强)的版本。

      a = list('abcde')
      rep = 3
      print [item for sublist in [rep * [i] for i in a] for item in sublist]
      

      输出

      ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e']
      

      这是上一个示例的扩展版本,使用简单的for 循环而不是嵌套列表推导式编写。

      b = []
      for sublist in [rep * [i] for i in a]:
          for item in sublist:
              b.append(item)
      print b
      

      【讨论】:

        【解决方案4】:
        sorted( range(10)  +  range(10) )
        

        【讨论】:

          【解决方案5】:
          >>> sorted(map(str, range(0,5) + range(0,5)))
          ['0', '0', '1', '1', '2', '2', '3', '3', '4', '4']
          

          【讨论】:

            【解决方案6】:
            [int(i/2 )for i in range(10)] 
            

            [i//2 for i in range(10)]
            

            【讨论】:

              【解决方案7】:

              其他答案涵盖了问题中提出的具体情况,但如果您想复制任意列表的内容,您可以使用以下内容:

              >>> import itertools
              >>> l = [1, 'a', 3]
              >>> list(itertools.chain.from_iterable(zip(l,l)))
              [1, 1, 'a', 'a', 3, 3]
              

              【讨论】:

                猜你喜欢
                • 2020-03-04
                • 2019-02-21
                • 1970-01-01
                • 2020-12-06
                • 2017-08-14
                • 2023-02-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多