Squaring all elements in a list
我被告知
编写一个函数square(a),该函数接受一个数字数组a,然后返回一个包含每个平方值的数组。
起初,我有
1 2 | def square(a): for i in a: print i**2 |
但是,由于我正在打印,因此无法正常工作,并且无法像我被要求的那样返回。
所以我尝试了
1 2 | def square(a): for i in a: return i**2 |
但这只能平方数组的最后一个数。 我如何才能使整个列表平方?
您可以使用列表理解:
1 2 | def square(list): return [i ** 2 for i in list] |
或者您可以
1 2 | def square(list): return map(lambda x: x ** 2, list) |
或者,您可以使用发电机。它不会返回列表,但是您仍然可以遍历列表,并且由于不必分配整个新列表,因此它可能比其他选项更节省空间:
1 2 3 | def square(list): for i in list: yield i ** 2 |
或者,您也可以执行无聊的旧版
1 2 3 4 5 | def square(list): ret = [] for i in list: ret.append(i ** 2) return ret |
使用列表推导(这是在纯Python中使用的方法):
1 2 3 | >>> l = [1, 2, 3, 4] >>> [i**2 for i in l] [1, 4, 9, 16] |
或numpy(一个完善的模块):
1 2 | >>> numpy.array([1, 2, 3, 4])**2 array([ 1, 4, 9, 16]) |
在
其他可能的解决方案是基于
1 2 3 | import numpy as np a = [2 ,3, 4] np.square(a) |
使用numpy。
1 2 | import numpy as np b = list(np.array(a)**2) |
1 2 3 4 5 | def square(a): squares = [] for i in a: squares.append(i**2) return squares |
你可以做
1 | square_list =[i**2 for i in start_list] |
哪个返回
1 | [25, 9, 1, 4, 16] |
或者,如果列表已经有值
1 | square_list.extend([i**2 for i in start_list]) |
哪个返回
1 | [25, 9, 1, 4, 16] |
注意:您不想做
1 | square_list.append([i**2 for i in start_list]) |
因为它返回列表中的列表:
1 | [[25, 9, 1, 4, 16]] |
1 2 3 4 5 | def square(a): squares = [] for i in a: squares.append(i**2) return squares |
所以我将如何使用上述功能对1-20的数字进行平方运算
另一种地图解决方案:
1 2 | def square(a): return map(pow, a, [2]*len(a)) |
1 2 3 4 5 | from array import * array('i', [5, 6, 4]) print(*list(map(pow, vals, [2] * len(vals))), sep='\ ') |