【问题标题】:Creating a new list using for loop?使用 for 循环创建新列表?
【发布时间】:2017-03-24 10:18:36
【问题描述】:

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

此函数的输入将是一个向量,即包含 3 个整数的一维列表。

代码如下:

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]

【问题讨论】:

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


    【解决方案1】:

    您可以在这里做几件事。

    首先,让我指出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]
    

    在将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]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多