【问题标题】:Normalisation and 0 padding规范化和 0 填充
【发布时间】:2017-09-22 21:56:31
【问题描述】:

我将如何创建一个函数,例如 normalist(x, y),它返回一个数字列表,该列表为“x”,标准化后标准化列表的总和为 1.0 并填充以包含“y”元素。例如,

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())

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在发布者已经尝试自己解决问题时才提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 刚刚编辑以显示我到目前为止所拥有的内容,对不起,我非常新。
  • 您发布的代码与您给出的定义不符。该函数必须有两个参数。在大多数情况下,从铅笔和纸开始。弄清楚将如何完成这项任务。例如,给定 [4, 3, 2, 1] 和 5,you 如何计算返回列表?将其分解为计算步骤并尝试编写 .. 你给出的代码甚至不会执行。
  • 大多数时候人们希望看到您的代码,这意味着您必须修复格式,为了将来参考,您可以通过突出显示代码并点击ctrl + 来格式化您的代码k
  • @Prune 我已经把它分解了,我可以解释我想要做什么,但如果我这样做,那么代码将不会运行,因为我不知道如何编写第二个参数在,所以我只是尝试先规范化一个列表,请注意我已经编码了一个月,最多一个月半,我只是想学习。

标签: python list variables normalization


【解决方案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,根据您的功能进行更改。

【讨论】:

  • 首先感谢您教我如何使用 ctrl + k 进行编辑,其次感谢您告知我变量的命名,我直接不知道,最后感谢您帮助我,我不知道你可以添加这样的列表,这是填充 0.0 的一种非常好的方法
  • 只要你愿意改变,那才是最重要的。这个网站上的人可能会觉得很冷漠,但这是因为他们看到了太多回答不好的问题。正如您所看到的,如果您只是以正确的格式询问并提供您尝试过的内容以及出了什么问题,那么人们很可能会提供帮助。祝你好运。
  • 我非常愿意学习编码,我只是在努力学习函数和代码的实际运行方式,我还有很长的路要走,但谢谢!
【解决方案2】:

首先,让我们直接获取参数:

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]

现在,要填充,只需将 n 与列表的长度进行比较:

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

请注意,如果 norm 已经足够长,这将不起作用。

【讨论】:

  • 到目前为止,我对编码感兴趣的事情之一是您可以处理某事的不同方式,没有固定的解决方案。非常感谢@Prune 的建议和帮助。
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 2011-03-21
  • 2016-04-17
  • 2010-12-01
  • 2012-05-22
  • 2013-08-31
  • 2013-08-11
相关资源
最近更新 更多