简体   繁体   中英

Creating a 2d matrix in python

I create a 6x5 2d array, initially with just None in each cell. I then read a file and replace the Nones with data as I read them. I create the empty array first because the data is in an undefined order in the file I'm reading. My first attempt I did this:

x = [[None]*5]*6

which resulted in some weird errors that I now understand is because the * operator on lists may create references instead of copies.

Is there an easy one liner to create this empty array? I could just do some for loops and build it up, but that seems needlessly verbose for python.

使用嵌套的理解列表:

x = [[None for _ in range(5)] for _ in range(6)]

What's going on here is that the line

x = [[None]*5]*6

expands out to

x = [[None, None, None, None, None, None]]*6

At this point you have a list with 6 different references to the singleton None . You also have a list with a reference to the inner list as it's first and only entry. When you multiply it by 6, you are getting 5 more references to the inner list as you understand. But the point is that theres no problem with the inner list , just the outer one so there's no need to expand the construction of the inner lists out into a comprehension.

x = [[None]*5 for _ in range(6)] 

This avoids duplicating references to any lists and is about as concise as it can readably get I believe.

If you aren't going the numpy route, you can fake 2D arrays with dictionaries:

>>> x = dict( ((i,j),None) for i in range(5) for j in range(6) )
>>> print x[3,4]
None

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM