【问题标题】:How to ensure a list is blanked如何确保列表为空白
【发布时间】:2021-11-29 20:09:16
【问题描述】:

我正在使用 colab。我有一个包含这些值的列表:

cents=[[5.4, 3.9, 1.3, 0.4], [5.8, 2.6, 4.0, 1.2], [7.7, 2.8, 6.7, 2.0]]

我在我的第二个代码块中建立了这个列表。

现在,在我的代码中,我想清除此列表并将值更改为另一个列表中值的平均值。这是我的代码:

cents=[]
def avg_and_assign(list_1, list_2, list_3):
 alc1=np.array(list_1)
 alc2=np.array(list_2)
 alc3=np.array(list_3)
 alc1_mean=np.mean(alc1, axis=0)
 alc2_mean=np.mean(alc2, axis=0)
 alc3_mean=np.mean(alc3, axis=0)
 alc1_mean1=alc1_mean[0:4]
 alc2_mean1=alc2_mean[0:4]
 alc3_mean1=alc3_mean[0:4]
 cent1=np.ndarray.tolist(alc1_mean1)
 cent2=np.ndarray.tolist(alc2_mean1)
 cent3=np.ndarray.tolist(alc3_mean1)
 cents.append(cent1)
 cents.append(cent2)
 cents.append(cent3)
cents=[cent1,cent2,cent3]
cent_array=np.array(cents)

print(cents)

avg_and_assign(avg_list_cent1, avg_list_cent2, avg_list_cent3)

print(cents)

这是我的输出:

[[5.4, 3.9, 1.3, 0.4], [5.8, 2.6, 4.0, 1.2], [7.7, 2.8, 6.7, 2.0]]
[[5.4, 3.9, 1.3, 0.4], [5.8, 2.6, 4.0, 1.2], [7.7, 2.8, 6.7, 2.0], [5.005999999999999, 3.4180000000000006, 1.464, 0.2439999999999999], [5.971830985915493, 2.7845070422535207, 4.50281690140845, 1.4901408450704228], [6.972413793103449, 3.0862068965517238, 5.893103448275861, 2.1310344827586207]]

为什么当我将美分列表分配为空时,它没有变空?这只能在同一个代码块中工作吗?

我的函数可以将平均值附加到列表中,但我希望美分首先成为一个空白列表。

谢谢。

【问题讨论】:

  • cents 在该函数中是一个局部变量,与同名的全局无关。您应该在函数末尾添加return cents,然后执行cents = avg_and_assign(...)
  • 显示代码的缩进似乎与您的真实代码不匹配。最好将其复制并直接粘贴到问题中。

标签: python arrays list numpy


【解决方案1】:

不要重复自己(“干”)。使用循环来完成重复性任务。然后,返回最终列表,而不是尝试使用全局变量。

def avg_and_assign(*lists):
    cents = []
    for lst in lists:
        alc = np.array(lst)
        alc_mean = np.mean(alc, axis=0)[:4]
        cents.append( np.ndarray.tolist(alc_mean) )
    return cents

cents=[cent1,cent2,cent3]
print(cents)

cents = avg_and_assign(avg_list_cent1, avg_list_cent2, avg_list_cent3)
print(cents)

我不清楚为什么你一直在转换为 numpy 数组。特别是,为什么要返回列表列表而不是 ndarray 列表?

【讨论】:

  • 谢谢!老实说,我也不确定。我只对 Python 进行了介绍,这是我的第一个真正的“这里有一些数据,这就是我希望你现在做的事情”的任务。所以我只是在尝试各种各样的事情。但是我不能分享我的整本 colab 书,在完成作业之前我也不想分享。此外,我从未见过函数中使用的 *lists。这意味着什么?
  • 您应该能够从上下文中弄清楚这一点。这会将所有参数传递给函数并将它们组合成一个列表。
  • 是的。看起来就是这样,我只是想确定一下。
  • 嗨。因此,自从我更改了代码后,我的代码就遇到了问题。我正在运行一个 while 循环,当我进入运行此函数的 while 循环时,我收到一个错误,即列表索引现在超出了另一个函数的范围。我还需要将其更改为 *lists 吗?
  • 您需要提出一个新问题。我们不知道你有什么,当然我们也看不到你的其他代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2012-06-17
相关资源
最近更新 更多