【问题标题】:Repeat list n times, sorted by original order [duplicate]重复列表n次,按原始顺序排序[重复]
【发布时间】:2015-08-05 07:51:21
【问题描述】:

我找不到以下问题的解决方案 我有一个字符串列表,比如说

base_list = ['d', 'ssa', 'aaa', 'bb']

我想重复这个列表n 次,但我需要保持原始列表的顺序。例如n=2,结果应该是:

final_list =  ['d', 'd', 'ssa', 'ssa', 'aaa', 'aaa', 'bb', 'bb']

编辑:不确定我是否应该将此问题标记为重复,因为我认为它比可能的重复Duplicate element in python list 更通用

【问题讨论】:

标签: python


【解决方案1】:
>>> base_list = ['d', 'ssa', 'aaa', 'bb']
>>> n = 2
>>> [i for i in base_list for _ in xrange(n)]
['d', 'd', 'ssa', 'ssa', 'aaa', 'aaa', 'bb', 'bb']

在列表理解内部,您使用 n 长度(内部循环)迭代范围,并通过外部列表遍历原始列表。

【讨论】:

    【解决方案2】:

    以下应该可以满足您的需求

    >>> base_list = ['d', 'ssa', 'aaa', 'bb']
    >>> final_list = []
    >>> n = 10
    >>> for item in base_list:
    ...     for i in range(n):
    ...             final_list.append(item)
    ... 
    >>> final_list
    ['d', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'ssa', 'ssa', 'ssa', 'ssa', 'ssa', 'ssa', 'ssa', 'ssa', 'ssa', 'ssa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'bb', 'bb', 'bb', 'bb', 'bb', 'bb', 'bb', 'bb', 'bb', 'bb']
    

    【讨论】:

      【解决方案3】:

      已经是explained here.

      应用于您的代码:

      >>> base_list = ['d', 'ssa', 'aaa', 'bb']
      >>> from itertools import repeat
      >>> final_list = [x for item in base_list for x in repeat(item, 2)]
      >>> final_list
      ['d', 'd', 'ssa', 'ssa', 'aaa', 'aaa', 'bb', 'bb']
      

      【讨论】:

        【解决方案4】:

        我猜来自标记问题的一个答案(其中 n=2)也适用于更一般的情况:

        from itertools import chain, repeat
        
        final_list = list(chain.from_iterable(repeat(item, n) for item in base_list))
        

        【讨论】:

        • 这是一个不错的选择,但对于小型列表来说有点过分了。
        【解决方案5】:

        我的第一个想法是自己压缩,然后压平:

        import itertools
        base_list = ['d', 'ssa', 'aaa', 'bb']
        n = 2
        list(itertools.chain.from_iterable(zip(*[base_list] * n)))
        

        【讨论】:

        • 这可能运行得最快,没有任何导入:第 1 行:n = 2 第 2 行:list(sum(zip(*[base_list] * n), ()))
        • sum 是二次的而不是线性的。
        猜你喜欢
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 2017-12-19
        • 1970-01-01
        • 2016-08-26
        相关资源
        最近更新 更多