【问题标题】:Issue in not getting the expected output while iterating through array遍历数组时未获得预期输出的问题
【发布时间】:2020-09-14 13:28:58
【问题描述】:

我有以下代码。我目前收到的输出不是预期的输出。我试图解决的伪代码如下所述。

   for each i in 1 · · · N do
         TEi = fmob(Li)
         TCi= fc(Li)
         TUi =fd(Li) 
         return 

Python 代码

def optimal_partition():                   
 TE=[10,1,3]
 TC=[2,3,1]
 TU=[2,3,1]

 N = len(TU)-1
 SUMS = [0] * N
 for j in range(N):
    for i in range(1, j + 1):
        SUMS[j] += TE[i]
    for k in range(j - 1, N + 1):
        SUMS[j] += TC[k]
    SUMS[j] += TU[j]
 return SUMS.index(min(SUMS))

对于上面的代码,我需要预期的输出是 [16,15]。谢谢,非常感谢您的帮助。

【问题讨论】:

  • 实际输出是多少?我猜是一个错误,所以请附上错误回溯的全文。
  • @quamrana,谢谢,预期的输出是 [9, 10],没有检索到错误,但预期的输出不是想要的。
  • 我猜如果我复制并运行你提供的代码我会得到一个错误。如果您没有收到错误,那么您必须运行不同的代码。请使用您拥有的实际代码更新问题。
  • 嗨@quamrana 我已经提供了完整的代码。请检查。谢谢
  • 按照你的算法,SUMS 应该有 3 个值(j = 1..3,或者当我们使用从零开始的索引时,j = 0..2),而不是 2 个值你目前有。

标签: python arrays python-3.x list


【解决方案1】:

这是使用列表切片而不是嵌套循环的算法的更好实现:

def part_sum(TE, TC, TU, j):
    return sum(TE[:j+1]) + sum(TC[j+1:]) + TU[j]

def optimal_partition(TE, TC, TU):
    return min(range(len(TE)), key=lambda j: part_sum(TE, TC, TU, j)) 

TE = [10,1,3]
TC = [2,3,1]
TU = [2,3,1]
print("The sums are: ", [part_sum(TE, TC, TU, j) for j in range(3)])
print("The optimal partition is at:", optimal_partition(TE, TC, TU))

请注意,有 3 个和,而不是 2 个,并且 j 的返回值使用从零开始的索引。如果你想返回一个从 1 开始的索引,那么只需在最优分区结果上加 1。

【讨论】:

    【解决方案2】:

    您正遭受0-based indexing 计算综合症的困扰。

    计算机科学有时使用0-based indexing,而数学似乎使用基于 1 的索引。

    这个程序似乎给了你预期的输出:

    def optimal_partition():                   
        TE=[10,1,3]
        TC=[2,3,1]
        TU=[2,3,1]
    
        N = len(TU) - 1
        SUMS = [0] * N
        for j in range(N):
            for i in range(j + 1):
                SUMS[j] += TE[i]
            for k in range(j + 1, N + 1):
                SUMS[j] += TC[k]
            SUMS[j] += TU[j]
        return SUMS
    
    SUMS = optimal_partition()
    print(SUMS)
    print(SUMS.index(min(SUMS)))
    

    输出:

    [16, 15]
    1
    

    【讨论】:

    • 感谢@quamrana 的精彩帮助,这正是我想要的,为此奋斗了很长时间。
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多