我告诉磨边所有元素以列表
写功能,正方形(a)中,接受一个阵列,,数字的,并返回包含每平方的值的阵列。
起初,我不得不
def square(a):
for i in a: print i**2
但是,这并不工作,因为我是打印的,而不是像回国有人问我。 所以我试过
def square(a):
for i in a: return i**2
但是,这只是我的数组的最后一个数字。我怎样才能得到它整个列表?
我告诉磨边所有元素以列表
写功能,正方形(a)中,接受一个阵列,,数字的,并返回包含每平方的值的阵列。
起初,我不得不
def square(a):
for i in a: print i**2
但是,这并不工作,因为我是打印的,而不是像回国有人问我。 所以我试过
def square(a):
for i in a: return i**2
但是,这只是我的数组的最后一个数字。我怎样才能得到它整个列表?
你可以使用列表理解:
def square(list):
return [i ** 2 for i in list]
或者你可以map
它:
def square(list):
return map(lambda x: x ** 2, list)
或者你可以使用一台发电机。它不会返回一个列表,但你仍然可以遍历它,因为你没有分配一个全新的列表,它可能是更节省空间比其他选项:
def square(list):
for i in list:
yield i ** 2
或者你可以做无聊的老for
-loop,虽然这不是地道的一些Python程序员宁愿:
def square(list):
ret = []
for i in list:
ret.append(i ** 2)
return ret
很好,你指出了很多方法。但是,大多数建立的解决方案都是基于列表理解或numpy。为了使'map'与'lambda'结合使用,请参阅http://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map –
谢谢!我使用了理解方法。将更多地考虑这种方法。 – user1692517
“这不像一些Python程序员更喜欢的惯用方式” - 我完全同意,但值得指出的是,在某些情况下,唯一可行的选择是附加到列表。我能想到的最好例子是,如果生成器需要“记住”之前返回的数字,以免返回重复或进入循环。 –
使用列表理解(这是纯Python的路要走):
>>> l = [1, 2, 3, 4]
>>> [i**2 for i in l]
[1, 4, 9, 16]
或者numpy(一个完善的模块):
>>> numpy.array([1, 2, 3, 4])**2
array([ 1, 4, 9, 16])
在numpy
,数学对数组的操作默认情况下是以元素方式执行的。这就是为什么你可以在**2
整个阵列。
其他可能的解决方案将是map
为基础,但在这种情况下,我真的会去列表理解。这是Pythonic :)和基于map
的解决方案,需要lambda
s is slower than LC。
def square(a):
squares = []
for i in a:
squares.append(i**2)
return squares
使用numpy的。
import numpy as np
b = list(np.array(a)**2)
Numpy为这样一个小问题似乎是矫枉过正。 –
公平点,但如果你需要方形列表,你很快就需要开始与他们进行其他操作,没有理由重新发明轮子。 – tacaswell
有没有办法避免使用np.array并只使用数组(a)** 2? – user1936752
还有一个地图解决方案:
def square(a):
return map(pow, a, [2]*len(a))
def square(a):
squares = []
for i in a:
squares.append(i**2)
return squares
,所以我会如何使用上述功能
做数字的平方1-20你可以做
square_list =[i**2 for i in start_list]
其中返回
[25, 9, 1, 4, 16]
,或者,如果列表中已经有值
square_list.extend([i**2 for i in start_list])
返回
[25, 9, 1, 4, 16]
注:你不想做
square_list.append([i**2 for i in start_list])
为它返回一个列表中的列表:
[[25, 9, 1, 4, 16]]
import numpy as np
a = [2 ,3, 4]
np.square(a)
这是功课?似乎是这样。 –
是的,我说“我被告知...”,所以我认为这很明显。我也对这个问题进行了一些尝试,并且不能提出所要求的格式,所以我来到这里。 – user1692517
请小心使用'list'和'array';这些是两种不同的数据结构。 – Akavall