Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: fastest way to create a list of n lists

Tags:

python

So I was wondering how to best create a list of blank lists:

[[],[],[]...] 

Because of how Python works with lists in memory, this doesn't work:

[[]]*n 

This does create [[],[],...] but each element is the same list:

d = [[]]*n d[0].append(1) #[[1],[1],...] 

Something like a list comprehension works:

d = [[] for x in xrange(0,n)] 

But this uses the Python VM for looping. Is there any way to use an implied loop (taking advantage of it being written in C)?

d = [] map(lambda n: d.append([]),xrange(0,10)) 

This is actually slower. :(

like image 894
munchybunch Avatar asked Apr 01 '11 20:04

munchybunch


People also ask

How do I make a list with N lists?

To create a list of n placeholder elements, multiply the list of a single placeholder element with n . For example, use [None] * 5 to create a list [None, None, None, None, None] with five elements None . You can then overwrite some elements with index assignments.

How do you take the N list in Python?

To access the first n elements from a list, we can use the slicing syntax [ ] by passing a 0:n as an arguments to it . 0 is the start index (it is inculded). n is end index (it is excluded).

How do you create a list inside a list in Python?

Using append() function to create a list of lists in Python. What append() function does is that it combines all the lists as elements into one list. It adds a list at the end of the list.


1 Answers

The probably only way which is marginally faster than

d = [[] for x in xrange(n)] 

is

from itertools import repeat d = [[] for i in repeat(None, n)] 

It does not have to create a new int object in every iteration and is about 15 % faster on my machine.

Edit: Using NumPy, you can avoid the Python loop using

d = numpy.empty((n, 0)).tolist() 

but this is actually 2.5 times slower than the list comprehension.

like image 186
Sven Marnach Avatar answered Oct 09 '22 12:10

Sven Marnach