我告訴磨邊所有元素以列表
寫功能,正方形(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