snippetpythonCritical
Create list of single item repeated N times
Viewed 0 times
listitemrepeatedsinglecreatetimes
Problem
I want to create a series of lists, all of varying lengths. Each list will contain the same element
How do I create the lists, without using a list comprehension
e, repeated n times (where n = length of the list).How do I create the lists, without using a list comprehension
[e for number in range(n)] for each list?Solution
You can also write:
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:
But wait - it's not a fair test...
The function
So if you want a list, use
[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('[0] * 10', 'import itertools', number = 1000000)
0.5577236771712819But 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.7508119747063233So if you want a list, use
[e] * n. If you want to generate the elements lazily, use repeat.Code Snippets
>>> 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!!!>>> timeit.timeit('list(itertools.repeat(0, 10))', 'import itertools', number = 1000000)
1.7508119747063233Context
Stack Overflow Q#3459098, score: 1210
Revisions (0)
No revisions yet.