【问题标题】:Python - having trouble with for loop, and getting columns as listsPython - for 循环有问题,并将列作为列表
【发布时间】:2021-07-29 19:44:40
【问题描述】:

我最近因为工作刚开始学习 python,我在代码中遇到了 for 循环。我希望我的程序输出每小时产生的氨量的值,这取决于 Excel 中的单元格(附在下面),并且我需要将“NH3 消耗的 H2”和“实际存储的”列作为 Python 中的列表按顺序前进。但是,当我运行这段代码时,进程一直在运行并且不会停止,这让我意识到我在某个地方搞砸了,但我不知道在哪里。

hourly_H2_prod = [hourly_elec*1000/avg_pwr_use for hourly_elec in elec_list]
H2_sum = sum(hourly_H2_prod)
avg_hourly_H2_consumed = avg_hourly_NH3_prod*3/17.31

init_H2_stored = H2_sum/365*Storage_days        #highlighted cell in Excel screenshot

actual_H2_stored = [init_H2_stored]
hourly_H2_consumed = []
for i in range(1,len(hourly_H2_prod)):
    for j in range(len(actual_H2_stored)):
        hourly_H2_consumed.append(max(min(avg_hourly_H2_consumed,actual_H2_stored[j]),0))
        actual_H2_stored.append(max(min(init_H2_stored,actual_H2_stored[j]+hourly_H2_prod[i]-hourly_H2_consumed[j]),0))

我已经设法获得“每小时 H2 生产”列的列表格式

(this is to show how the values are dependent on each other, for actual-H2-stored)

(how values depend for hourly-H2-consumed)

当我需要使用 Excel 公式中所示的前一个变量进行迭代时,我想我搞砸了。我也希望我已经充分解释了一切,感谢您的帮助!

【问题讨论】:

  • 请使用复制和粘贴而不是图像 - 请参阅 How to Askmeta.stackoverflow.com/questions/285551/…
  • 它不会让我这样做,因为我是一个新用户并且需要有 10 个声望点或其他东西
  • 而不是for i in range(1,len(X))for ii,value in enumerate(X) 它更像pythonic。

标签: python excel list for-loop


【解决方案1】:

我想通了,@VonWooDSoN 你是对的,嵌套循环确实把一切都搞砸了。我完全删除了该行,而是将其放入,它工作得很好,现在我得到了我需要的列表形式的值,所以谢谢你的提示!

for i in range(1,len(hourly_H2_prod)):
    hourly_H2_consumed.append(max(min(avg_hourly_H2_consumed,actual_H2_stored[i-1]),0))
    actual_H2_stored.append(max(min(init_H2_stored,actual_H2_stored[i-1]+hourly_H2_prod[i]-hourly_H2_consumed[i-1]),0))

【讨论】:

    【解决方案2】:

    我正在尝试查看您的错误在哪里,但我无法运行您的代码。
    我认为问题在于嵌套的“j”for循环中真正。从 python 3 开始,range 是一个生成器,因此在嵌套循环中添加到该列表可能会创建一个无限循环,因为 len 函数 可能 每次迭代都会被调用。尝试用这个替换它:for j in list(range(len(actual_H2_stored))):

    我将list 添加到range,以便在您开始迭代之前完全预处理您的列表长度。

    【讨论】:

    • 尝试替换您提到的那一行,但代码仍然无法运行。我还尝试完全删除该行,将actual_H2_stored 前面的j 替换为[i-1],将hourly_H2_consumed 前面的j 替换为[i],我得到一个IndexError:列表索引超出范围。
    • 我想通了,贴出来作为答案让其他人看到,谢谢你的提示!
    • 很抱歉,我无法提供具体的答案。在迭代时修改数据结构(for 循环)是一种普遍的“代码味道”(要避免的事情,以及寻找错误的地方)。我很高兴你找到了答案。快乐的黑客攻击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2016-09-04
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多