# Create List of Single Item Repeated n Times in Python

### Question

I know a list comprehension will do this, but I was wondering if there is an even shorter (and more Pythonic?) approach.

I want to create a series of lists, all of varying length. Each list will contain the same element e, repeated n times (where n = length of the list). How do I create the lists, without doing

``````[e for number in xrange(n)]
``````

for each list?

1
446
1/1/2018 12:16:53 PM

You can also write:

``````[e] * n
``````

You should note that if e is for example an empty list you get a list with n references to the same list, not n independent empty lists.

Performance testing

At first glance it seems that repeat is the fastest way to create a list with n identical elements:

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

But wait - it's not a fair test...

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

The function `itertools.repeat` doesn't actually create the list, it just creates an object that can be used to create a list if you wish! Let's try that again, but converting to a list:

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

So if you want a list, use `[e] * n`. If you want to generate the elements lazily, use `repeat`.

673
8/11/2010 2:21:25 PM

``````>>>  * 4
[5, 5, 5, 5]
``````

Be careful when the item being repeated is a list. The list will not be cloned: all the elements will refer to the same list!

``````>>> x=
>>> y=[x] * 4
>>> y
[, , , ]
>>> y = 6
>>> y
[, , , ]
``````