2017-04-25 97 views
-2

我将如何创建一个函数,例如normalist(x,y),它返回一个数字列表'x',归一化,以便规范化列表的总和为1.0,填充以包含'y '元素。例如,规范化和0填充

normalist([2,2,2,2,2], 5) => [0.2, 0.2, 0.2, 0.2, 0.2] 
normalist([5], 4)   => [1.0, 0.0, 0.0, 0.0].` 

我不知道如何去填充,而我试图让normalist(X,Y),所以我可以运行对任何列表的功能。

def normalist(): 

    list = [2, 2, 2, 2] 
    s = sum(list) 
    norm = [float(i)/s for i in list] 
    return norm 

print(normalist()) 
+4

看起来你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。证明这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(控制台输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ]和[问]。 – MooingRawr

+0

只是编辑,以显示我到目前为止,对不起,我是非常新的。 –

+2

您发布的代码与您提供的定义不符。该功能必须有两个参数。大多数情况下,从铅笔和纸张开始。弄清楚你*会做什么。例如,给定[4,3,2,1]和5,你如何计算返回列表?将其分解为计算步骤,并尝试编程*即*。您提供的代码甚至不会执行。 – Prune

回答

1

如何正常化列表:

def normalist(lst): 
    s = sum(lst) 
    norm = [float(i)/s for i in lst] 
    return norm 

lst = [2, 2, 2, 2] 
print(normalist(lst)) 

注意我们传递的lst而不是硬的功能对其进行编码。也不要命名变量关键字如list。 Python允许这个,但它覆盖了一些函数。


增加了一些0.0填充:

def normalist(lst, n): 
    if len(lst) > n: 
     print('length of list is bigger than n') 
     return False 
    s = sum(lst) 
    norm = [float(i)/s for i in lst] + [0.0]*(n-len(lst)) 
    return norm 

lst = [2, 2, 2, 2] 
n = 5 
print(normalist(lst,n)) #outputs [0.25, 0.25, 0.25, 0.25, 0.0] 

在Python中,我们可以使用+追加或添加列表一起,将[0.0]*(n-len(lst))基本上是说:我想要的0.0名单,我想n - len(lst)数他们。 len()我们还检查lst的尺寸是否小于或等于n,请更改此设置,但您希望您的功能正常工作。

+0

首先谢谢你教我如何用ctrl + k编辑,其次感谢你告诉我有关变量的命名,我直我不知道你是否可以添加这样的列表,这是一个非常好的填充方式0.0 –

+1

只要你愿意改变,那就是所有重要的事情。这个网站上的人可能会变冷,但这是因为他们已经看到很多回答非常糟糕的问题。正如你所看到的,如果你只是以正确的格式提问,并提供你已经尝试过的以及出了什么问题,那么人们将很有可能提供帮助。祝你好运。 – MooingRawr

+0

我很愿意学习代码,我只是在努力学习函数和代码如何运行,我还有很长的路要走,但谢谢! –

1

首先,让我们的参数直:

def normalist(in_list, n): 

    s = sum(in_list) 
    norm = [float(i)/s for i in in_list] 
    return norm 

print(normalist([4, 5, 2, 5], 4)) 

输出:现在

[0.25, 0.3125, 0.125, 0.3125] 

,垫,只是比较ñ到列表的长度:

for extra in range(len(norm), n+1): 
    # append a 0 to norm 

请注意,如果规范已经足够长,这将不会执行任何操作。

+1

到目前为止,我对编码感兴趣的事情之一是你可以采取不同的方式来解决某些问题,但没有一套解决方案。非常感谢@Prune的建议和帮助。 –