【问题标题】:looping sublist in lists在列表中循环子列表
【发布时间】:2021-07-22 07:42:30
【问题描述】:

我正在为以下问题寻求帮助 我正在尝试构建的程序执行以下操作:

第一阶段: 我正在求解具有两个值的非线性方程

第二阶段: 做这个序列 n 次得到一系列答案

第三阶段: 我需要分别遍历每个答案,并将其应用于另一个与第一阶段类似的函数 n 次。问题是我注意到能够遍历第三阶段的答案。我试图将我在第一阶段得到的答案插入到一个列表列表中并循环遍历它,但我没有得到正确的答案

有什么建议可以应用这种东西吗?

    Tin_segment = [650.]
    Q=[0]
    tstorage=[100.]

    def f(variables):
        (Tout, Q) = variables
        first_eq = 3600 * Q - 96645 * 1.2 * (Tin_segment[-1] - Tout)
        second_eq = 3600 * Q - 87.2 * 150 * ((Tin_segment[-1] + Tout) / 2 - tstorage[-1])
         return [first_eq, second_eq]


    n = 7
    def solve_init():
       for _ in range(n):
          solution = opt.fsolve(f, (1, 1))
          Tin_segment.append(solution[0].round(2))
          Q.append(solution[1].round(2))

   solve_init()

这是第一阶段,我得到了类似的东西

[650.0, 591.28, 538.83, 491.98, 450.13, 412.75, 379.36, 349.53]

我需要从这个列表中取出每个值,然后通过上面的函数再次运行它 n 次。 我厌倦了以下 - 将上面的每个值分成一个子列表:


    n=1
    tout_segment = [Tin_segment[i:i + n] for i in range(0, len(Tin_segment), n)]

得到这个:

[[650.0], [591.28], [538.83], [491.98], [450.13], [412.75], [379.36], [349.53]]

然后再次循环将答案添加到每个子列表,但没有成功

【问题讨论】:

  • loop again 是什么意思?更好地显示您用于此和预期结果的代码。也许你需要for item in tout_segment: item.append(value),但你没有展示你尝试了什么以及你期望什么结果,所以我们无法帮助你。
  • 我不明白你为什么要创建平面 Tin_segment - 也许你可以直接创建嵌套值 - 也许它只需要更改一些意图并首先使用 [650.0] 创建列表,然后附加此列表到全局列表。
  • 并使用示例数据和所有导入更好地创建最少的工作代码。它有助于运行代码、查看结果、测试修改。
  • 您好,感谢您的回答。原因如下:计算多于一个阶段:第一阶段用于获取初始值。然后再次使用这些初始值,使用类似的函数,并为每个初始值获取一个单独的列表
  • 我认为你必须进行第二个循环,但有两个 for-loops。首先从列表中获取元素,其次使用它 n 次。但我不知道你 epxcet 的最终结果是什么,所以我不知道这是否是好的方向。您应该显示预期的结果。

标签: python list loops


【解决方案1】:

我不知道你想要什么结果,但我愿意

import scipy.optimize as opt

# --- functions ---

def f(variables):
    (Tout, Q, Tin, ts) = variables
    first_eq = 3600 * Q - 96645 * 1.2 * (Tin - Tout)
    second_eq = 3600 * Q - 87.2 * 150 * ((Tin + Tout) / 2 - ts)
    return [first_eq, second_eq, 0, 0]


def solve_init():
    global Tin_segment
    
    item = Tin_segment
    
    for _ in range(n):
        first, second, _, _ = opt.fsolve(f, (1, 1, item[-1], tstorage[-1]))
        item.append(first.round(2))
        Q.append(second.round(2))

    print(Tin_segment)
    print('-----')
        
    Tin_segment = [[x] for x in item]
    
    for item in Tin_segment:
        for _ in range(n):
            first, second, _, _ = opt.fsolve(f, (1, 1, item[-1], tstorage[-1]))
            item.append(first.round(2))
            Q.append(second.round(2))

    print(Tin_segment)
    print('-----')

# --- main ---

n = 7

Tin_segment = [ 650. ]
Q = [0]
tstorage = [100.]

solve_init()

结果

[650.0, 591.28, 538.83, 491.98, 450.13, 412.75, 379.36, 349.53]
-----
[
[650.0, 591.28, 538.83, 491.98, 450.13, 412.75, 379.36, 349.53], 
[591.28, 538.83, 491.98, 450.13, 412.75, 379.36, 349.53, 322.89], 
[538.83, 491.98, 450.13, 412.75, 379.36, 349.53, 322.89, 299.09], 
[491.98, 450.13, 412.75, 379.36, 349.53, 322.89, 299.09, 277.83], 
[450.13, 412.75, 379.36, 349.53, 322.89, 299.09, 277.83, 258.84], 
[412.75, 379.36, 349.53, 322.89, 299.09, 277.83, 258.84, 241.88], 
[379.36, 349.53, 322.89, 299.09, 277.83, 258.84, 241.88, 226.73], 
[349.53, 322.89, 299.09, 277.83, 258.84, 241.88, 226.73, 213.2]
]

【讨论】:

  • 非常感谢。它似乎正在工作
猜你喜欢
  • 2017-11-06
  • 2021-09-15
  • 2017-02-18
  • 2012-12-04
  • 2021-11-25
  • 2019-06-19
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多