【问题标题】:python list transformation from A B C to A A B B C C [duplicate]python列表从A B C转换为A A B B C C [重复]
【发布时间】:2020-07-15 03:13:13
【问题描述】:

我想将列表 ["A", "B", "C"] 转换为新列表 ["A", "A", "B", "B", "C", " C”]。我可以想到一种丑陋的循环方式,但是有一个单行吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    如何使用 itertools 进行列表连接?

    import itertools
    a = ["A", "B", "C"]
    c = list(itertools.chain(*[ 2*x for x in a] ))
    print(c)
    

    输出

    ['A', 'A', 'B', 'B', 'C', 'C']
    

    您始终可以将2 替换为变量。

    【讨论】:

      【解决方案2】:
      • 您可以使用itertools.chain 和 zip 来获得所需的结果。
      from itertools import chain
      l = [1,2,3]
      list(chain.from_iterable(zip(l,l)))
      

      输出:

      [1,1,2,2,3,3]
      

      【讨论】:

        【解决方案3】:

        我会使用 itertools.repeat

        import itertools
        n= 2
        print([repetition for i in range(10)
                   for repetition in itertools.repeat(i,n) ])
        

        输出

        [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]
        

        【讨论】:

        • 如果你已经做了两个循环,你不需要itertools.repeat,只需使用[i for i in original_input for _ in range(n)]