我需要编写一个规范化矢量的函数(找到单位矢量)。可以通过将矢量的每个单独分量除以其大小来归一化矢量。
此函数的输入将是一个向量,即包含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 :(得分: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
手动执行它:
magng
,可以轻松地在一行中计算 sum
。通过理解,您将每个item
提升为** 2
,然后立即划分sum
返回的总和:
magng = sum(item**2 for item in my_list) ** (1/2)
在此之后,您可以再次使用理解来创建新列表:
return [item/magng for item in my_list]
在item
除以my_list
之后,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]
都会创建一个列表。
最后,你的全部功能可以减少到两行(一行但会妨碍可读性):
UINavigationBar.appearance().setBackgroundImage(UIImage(named: "image")!.resizableImage(withCapInsets: UIEdgeInsetsMake(0, 0, 0, 0), resizingMode: .stretch), for: .default)
在您学会理解之后,这也更加简洁,惯用且非常直观。