0

我的程序的最后一部分没有出现,有人可以帮助我吗?

给定一个数字列表,将列表中的值标准化为 [0,1] 范围内。首先找到列表中的最小值和最大值,min_val 和 max_val。将列表中的每个元素 x 更改为新值 y, st y = (x-min_val)/(max_val-min_val)。打印修改后的列表。例如 list: [2,1,3,4] 变为: [0.3333333333333333, 0.0, 0.6666666666666666, 1.0] 您可以在程序中硬编码示例列表,但解决方案不应依赖它。也就是说,如果我们只修改该列表并重新运行您的程序,它应该会根据新列表产生正确的结果。

mylist=[3,1,5,9,2]
n=len(mylist)
newlist=[]
print("orginal list is:",mylist)


min_val=min(mylist)
print("minimum value is:",min_val)

max_val=max(mylist)
print("maximum value is:",max_val)


for x in range(1+n+1,1):
    newlist=((x-min_val)/(max_val-min_val))
print(newlist)
4

2 回答 2

4

在最后一部分中,您根本不对元素做任何事情mylist

你需要类似的东西

newlist = [(x - min_val)/(max_val - min_val) for x in mylist]

使用显式for循环,就像您尝试做的那样:

newlist = []
for x in mylist: # sic!
    newlist.append((x - min_val) / (max_val - min_val))
于 2012-09-28T17:06:56.913 回答
1

首先,您在 for 的每一步都重新分配 newlist。

  for x in range(1+n+1,1):
      newlist.append((x-min_val)/(max_val-min_val))
  print(newlist)

然后,您很可能需要修复您的“范围”功能 [如果使用 python2];最后,您可能需要将这些 int 转换为浮点数以避免整数除法 [如果使用 python2]

  for x in mylist:
      newlist.append(float(x-min_val)/(max_val-min_val))
  print(newlist)
于 2012-09-28T17:10:34.513 回答