python excersice:列出总和

Posted

技术标签:

【中文标题】python excersice:列出总和【英文标题】:python excersice: lists sums 【发布时间】:2022-01-22 22:44:46 【问题描述】:

我有这个过度:

*给定一个列表 L,我们用 ???? L 的通用元素和 ????在对称位置的元素到????。把它写下来一个函数检查列表,它接收一个偶数长度的正整数列表 L 并返回一个布尔值。特别是,该函数返回 True 当且仅当,对于每个元素 ???? L 的值的总和 ????和 ????更伟大 位于 ???? 之间的元素的值的总和和 ????。 请注意,当????和 ????是相邻的,位于 ???? 之间的元素的值之和和 ????可以假设为零。 示例:如果 L = [12, 9, 7, 2, 1, 1, 3, 12] 则函数返回 True,因为:

12 + 12> 9 + 7 + 2 + 1 + 1 + 3; 9 + 3> 7 + 2 + 1 + 1; 7 + 1> 2 + 1; 2 + 1> 0.*

我的代码是这样的:

def sum_list(l):
    list_sum = []
    pst_num = 0
    ult_num = -1
    for num in range(len(l)//2):
        list_sum.append(l[pst_num]+l[ult_num])
        pst_num +=1
        ult_num -=1
    return list_sum


def examine_list(l):
    somme_xd = sum_list(l)
    list_without_first_nums = []
    first = 1
    last = -1
    for n in range(len(l)//2):
        list_without_first_nums.append(l[first:last])
        first += 1
        last -= 1
 
    st_sum = 0
    count = 0
    for lists in range(len(list_without_first_nums)):
        for nums in range(len(list_without_first_nums[lists])):
            if somme_xd[st_sum] >= sum(list_without_first_nums[lists][nums]):
                st_sum += 1
                count += 1
                if count == len(somme_xd):
                    return True
            else:
                return False
                        
L = [12, 9, 7, 2, 1, 1, 3, 12]
examine_list(L)

我创建了sum_list,他创建了一个数组总和列表。 我的问题是第二个函数: sum 总是给我错误:

Traceback (most recent call last):
  File "C:\Users\ALESSA~1\AppData\Local\Temp\tempCodeRunnerFile.python", line 35, in <module>    
    examine_list(L)
  File "C:\Users\ALESSA~1\AppData\Local\Temp\tempCodeRunnerFile.python", line 26, in examine_list
    if somme_xd[st_sum] >= sum(list_without_first_nums[lists][nums]):
TypeError: 'int' object is not iterable

【问题讨论】:

请在您的帖子中包含错误信息 是的,我马上添加 somme_xd 包含 int。 & 您正在以 somme_xd[st_sum] 的身份访问 int 变量,这是不可接受的。 list_without_first_nums 是一个 2D 列表,您将它索引两次,从而给出元素。你不能sum 一个元素。你需要一个可迭代的。也许删除一级索引? 我该怎么办? @HarshaBiyani 【参考方案1】:

您可以为此使用递归:

def examine_list(L):
    return not L or L[0]+L[-1]>sum(L[1:-1]) and examine_list(L[1:-1])

L = [12, 9, 7, 2, 1, 1, 3, 12]
print(examine_list(L)) # True

或者用 all() 函数理解:

def examine_list(L):
    return all(L[i]+L[-1-i]>sum(L[i+1:-1-i]) for i in range(len(L)//2))

为避免重复添加列表的子范围(这有点低效),您可以在一个循环中执行此操作,该循环从总数开始,并随着向内进行而逐渐减少最左边/最右边的项目:

def examine_list(L):
    total = sum(L)
    for a,b in zip(L,reversed(L)):     # progress inwards from both sides
        total  -= a+b                  # reduce total to get sum in between
        if a+b <= total: return False  # not x+x' > in-between sum
        if total == 0: break           # reached middle, stop
    return True

【讨论】:

你能解释一下第二个代码吗?我是初学者 all() 函数检查可迭代的布尔值,如果所有值都为 True,则返回 True。 all(...) 中的理解通过从 0 到列表中点的索引。 L[i]+L[-1-i] 将位置 i 的元素与相反位置的元素(即 x 和 x')相加。 sum(L[i+1:-1-i]) 将这两者之间的所有元素相加。所以我们得到了 x+x'

以上是关于python excersice:列出总和的主要内容,如果未能解决你的问题,请参考以下文章

使用Conda [Anaconda]批量更新包裹

python3.3不自带的模块或工具包 下载以后要怎么处理才能在开发环境中调用 (比如放到pyth

数组中每个类别的总和

将列表分成两部分,它们的总和彼此最接近

获取每个名称的总成本总和

第10组 团队Git现场编程实战