创建重复N次的单个项目列表

  • 问题:
  • 我想创建一系列的列表,所有的长度都不一样。每个列表将包含相同的元素e,重复n次(其中n=列表的长度)

    如何创建列表,而不对每个列表使用列表理解[e代表xrange(n)中的number]?在

  • 答案:
  • 你也可以写下:

    [e] * n

    你应该注意,如果e是一个空列表,你得到的列表中有n个引用到同一个列表,而不是n个独立的空列表。在

    性能测试

    乍一看,repeat似乎是创建包含n个相同元素的列表的最快方法:

    >>> timeit.timeit('itertools.repeat(0, 10)', 'import itertools', number = 1000000)
    0.37095273281943264
    >>> timeit.timeit('[0] * 10', 'import itertools', number = 1000000)
    0.5577236771712819

    但是等等-这不是一个公平的测试

    >>> itertools.repeat(0, 10)
    repeat(0, 10) # Not a list!!!

    函数itertools.重复实际上并不创建列表,它只是创建一个对象,如果您愿意,可以使用该对象来创建列表!让我们再试一次,但是转换成一个列表:

    >>> timeit.timeit('list(itertools.repeat(0, 10))', 'import itertools', number = 1000000)
    1.7508119747063233

    因此,如果您想要一个列表,请使用[e]*n。如果希望延迟地生成元素,请使用repeat