使用for循环创建新列表?

时间:2016-11-10 11:39:19

标签: python list python-3.x for-loop python-3.5

我需要编写一个规范化矢量的函数(找到单位矢量)。可以通过将矢量的每个单独分量除以其大小来归一化矢量。

此函数的输入将是一个向量,即包含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]

1 个答案:

答案 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)

在您学会理解之后,这也更加简洁,惯用且非常直观。