【问题标题】:Why is my counter in the for-loop not working? [closed]为什么我在 for 循环中的计数器不起作用? [关闭]
【发布时间】:2022-01-17 08:28:54
【问题描述】:

我正在尝试构建 ABM(基于代理的模型)。这个函数应该建立一个包含我的周期数长度的列表,它被指定为 50。所以每个周期的男性数量。

目标是一个包含 50 个不同整数的列表,给出我在那个时期拥有的男性数量。 period =1 is given 的第一个值,这就是循环从 [1] 而不是 [0] 开始的原因。因此我初始化了men_list = [initial_no_of_men_per_clan]。现在我得到列表超出范围错误,我的men_list[t] 方程开始了。

如果我尝试打印t,我只会得到1 而不是[1, 2, 3, 4, 5, ...]

这是我的代码:

for t in range(1, no_of_periods):
    print(t)
    men_list[t] = men_list[(t-1)] - dead_food_list[(t-1)] + pop_growth[(t-1)]
return men_list.append

那我当然会得到error: list indexout of range。 最后,我想让men_list 拥有与no_of_periods 相同数量的条目。比如,我想知道每个时期我有多少男人。所以代码应该建立男性列表。

【问题讨论】:

  • range() 不包括最终值。所以range(1, 50) 从 1 变为 49。
  • 您的代码有一个 return 语句,但缺少函数的定义和签名(def 行)以及如何调用函数的示例。
  • 您不能通过分配给索引来创建新的列表元素。使用men_list.append() 将新元素添加到列表末尾。
  • 什么是 ABM?
  • men_list.append 是一个函数,您需要使用参数调用它。 return men_list.append 返回函数,它不调用它。

标签: python list for-loop range


【解决方案1】:

你可以试试这个:

  • 如果列表已填充
  • 如果列表长度相同(否则会出现假结果)
  • 如果列表的内容都是可数类型的
men_list = [a-b+c for a,b,c in zip(men_list, dead_food_list, pop_growth)]

【讨论】:

  • 这假定列表的长度相同...
  • zip 不在乎,就像索引一样,但是如果长度不同,您可能会丢失数据。它还假设列表都是可数的。
  • 有点 - 来自文档,“默认情况下,zip() 在最短的迭代用完时停止”
  • 没错! :-)
  • 我的意思是错误可能来自这些列表之一的大小不同
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多