2016-11-10 87 views
0

我需要編寫一個函數來標準化矢量(查找單位矢量)。矢量可以通過將矢量的每個單獨分量除以其幅度來歸一化。使用for循環創建一個新列表?

該函數的輸入將是一個向量,即包含3個整數的1維列表。

的代碼如下:

def my_norml(my_list): 
    tot_sum = 0 
    for item in my_list: 
     tot_sum = tot_sum + item**2 
    magng = tot_sum**(1/2) 
    norml1 = my_list[0]/magng #here i want to use a for loop 
    norml2 = my_list[1]/magng 
    norml3 = my_list[2]/magng 
    return [norml1, norml2,norml3] 

回答

0

有幾件事情,你可以在這裏做。

最初,我想指出tot_sum = tot_sum + item**2可以寫得更簡潔,如tot_sum += item**2。要回答你的問題,你可以使用一個循環來實現你想要的:

ret_list = [] 
for i in my_list: 
    ret_list.append(i/magng) 
return ret_list 

但這不是最好的方法。 利用理解來實現你所需要的是更好的方式;此外,sum內置功能,可以作總結爲你而不是你需要用一個for-loop手動執行它:通過傳遞一個修真sum

magng可以很容易地在一個線來計算。隨着理解你提出的每個item** 2,然後立即分的總和,即sum回報:通過再次利用的理解

magng = sum(item**2 for item in my_list) ** (1/2) 

在此之後,你可以創建新的列表:

return [item/magng for item in my_list] 

它創建my_list中的每個item之後的列表除以magng後的列表。

最後,你的全功能可以減少到兩行(和一個但這會妨礙可讀性):

def my_norml(my_list): 
    magng = sum(item**2 for item in my_list) ** (1/2) 
    return [item/magng for item in my_list] 

這是更簡潔,地道和非常直觀的,你已經學會內涵太之後。