简体   繁体   中英

Function squaring 2-d array python

I have a function that takes in any 2-d array and return a 2-d array (the same format as the array being implemented) but the values are squared. ie [[1,2],[3,4]] -----> [[1,4],[9,16]]

my code so far:

m0 = [[1,2],[3,4]]
empty_list = []
for x in m0:
   for i in x:
     empyt_list.append(x**2)

This gives me a 1-d array but how would i return a 2-d array as the imputed value?

Working with an outer list

The point is that you will need an extra list outside to store the columns. So we can introduce temporary lists we build up and add as rows :

m0 = [[1,2],[3,4]]
result = []
for sublist in m0:
    row = []
    for item in sublist:
        row.append(item**2)
    result.append(row)

Notice that we here iterate over the item s of the sublist .

Using list comprehension

We can however write this more elegantly with list comprehension

result = [[x*x for x in sublist] for sublist in m0]

Note : if you have to square a number x , it is usually more efficient to use x * x , then to write x ** 2 .

Using numpy (for rectangular lists)

In case the list is rectangular (all sublists have the same length), we can use numpy instead:

from numpy import array

a0 = array(m0)
result = a0 ** 2

You can make a recursive function to handle any depth of nested lists:

def SquareList(L):
    if type(L) is list:
        return [SquareList(x) for x in L]
    else:
        return L**2

Example:

 > print(SquareList([1,[3],[2,[3]],4]))
 [1, [9], [4, [9]], 16]

You can just do this by a list comprehension:

empty_list = [[m0[i][j]**2 for j in range(len(m0[i]))] for i in range(len(m0))]

Or like your Codestyle:

empty_list = m0

for i in range(len(m0)):
    for j in range(len(m0[i])):
        empty_list[i][j] = m0[i][j] ** 2

Your problem is that you never created a 2D-list and you just append the values on the created 1D-list.

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