Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to I invert a 2d list in python [duplicate]

I have a 2d list like this:

   1   2   3

   4   5   6

and I want to make this:

   1   4

   2   5

   3   6

I've tried to do a for loop and switch each value but I keep getting an index out of bound error. Here's what I have:

for i in results:
    for j in range(numCenturies):
        rotated[i][j] = results [j][i]
like image 515
DannyD Avatar asked Nov 29 '13 05:11

DannyD


People also ask

How do you transpose a 2D list in Python?

You can transpose a two-dimensional list using the built-in function zip() . zip() is a function that returns an iterator that summarizes the multiple iterables ( list , tuple , etc.). In addition, use * that allows you to unpack the list and pass its elements to the function. Elements are tuple .

How do you flatten a multidimensional array in Python?

By using ndarray. flatten() function we can flatten a matrix to one dimension in python. order:'C' means to flatten in row-major. 'F' means to flatten in column-major.

How do you slice a 2D list in Python?

As shown in the above syntax, to slice a Python list, you have to append square brackets in front of the list name. Inside square brackets you have to specify the index of the item where you want to start slicing your list and the index + 1 for the item where you want to end slicing.


Video Answer


2 Answers

http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html

>>> from numpy import transpose
>>> transpose([[1,2,3],[4,5,6]])
array([[1, 4],
       [2, 5],
       [3, 6]])
like image 162
Chris Martin Avatar answered Sep 22 '22 17:09

Chris Martin


From python documentation on zip function:

This function returns a list of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables. The returned list is truncated in length to the length of the shortest argument sequence. When there are multiple arguments which are all of the same length, zip() is similar to map() with an initial argument of None. With a single sequence argument, it returns a list of 1-tuples. With no arguments, it returns an empty list.

Example:

zip([1, 2, 3], [4, 5, 6]) # returns [(1, 4), (2, 5), (3, 6)]

If you need the result to be the list of lists, not the list of tuples, you can use list comprehension:

[list(x) for x  in zip([1, 2, 3], [4, 5, 6], [7, 8, 9])] # returns [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

If all your variables are stored in one 2d list, and you want it pass it into zip function, you can use the following (I'll call it the star notation, because I can't remember the proper English term for it):

results = [[1, 2, 3], [4, 5, 6]]
zip(*results) # returns [(1, 4), (2, 5), (3, 6)]
like image 34
aga Avatar answered Sep 21 '22 17:09

aga