询问子列表的所有和的列表时出现问题

2024-03-29 09:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图写一个代码,给我们一个子列表和的列表。例如,如果输入的列表是[[5,4],[2,1,7],[1]],我们将得到这个结果作为回报[9,10,1]。 我的老师要求我们不要使用求和函数,因为我们还没有学会它。 我目前有一个代码,但有一些事情我不确定,它总是返回一个空列表

这就是我所拥有的:

def sumSublist(inital_list):
    i = 0
    initial_list = list()
    finalList = []
    while i < len(initial_list):
        sublist = list[i]
        for j in sublist:
            sublistsum = 0
            sublistsum += j
            finalList.append(sublistsum)
        i += 1
    return finalList


print(sumSublist([[5, 4], [2, 1, 7], [1]]))

它会打印:[] 任何帮助或建议都会大有帮助,谢谢


Tags: 函数代码列表def老师事情listinitial
3条回答

如果只是一个包含一层嵌套列表的列表,则可以轻松执行此操作:

正常方式:

lst = [[1,2],[1,2,3], [1]]

summed = [[sum(i)] for i in lst]

不使用sum()

# this does the same thing but in reference to what you were talking about
def sumSubList(lst):
    summed = []
    for i in lst:
        summ = 0
        for x in i: summ += x
        summed.append([summ])
    return summed

print(sumSubList(lst))

您可以考虑首先定义在一个数字列表上运行的^ {CD1>}函数,然后将其应用到^ {CD2>}的每一个列表中(在我的例子中,它是^ {CD3>}):

def sum(xs):
  # traverse each element of xs
  # and return the sum

def sum_sublist(xss):
  # traverse each element of xss
  # which are lists, apply the `sum` function
  # defined above on each, and return the list of the sums

您的解决方案存在几个问题:

  • 输入参数中有一个输入错误,它应该命名为initial_list,而不是inital_list
  • 您必须像这样访问输入列表:initial_list[i],这是不正确的:list[i]
  • 您正在销毁此行中的输入列表:initial_list = list()(这就是结果为空的原因。)
  • 在内环的每次迭代中,总和都会丢失在这一行:sublistsum = 0,这就是为什么这一部分必须在内环之前进行
  • 添加子列表中的所有元素后,行finalList.append(sublistsum)必须在内部循环之后

这将解决以下问题:

def sumSublist(initial_list):
    i = 0
    finalList = []
    while i < len(initial_list):
        sublist = initial_list[i]
        sublistsum = 0
        for j in sublist:
            sublistsum += j
        finalList.append(sublistsum)
        i += 1
    return finalList

但是,如果我们始终使用for,上述解决方案可以简化:

def sumSublist(initial_list):
    finalList = []
    for sublist in initial_list:
        sublistsum = 0
        for num in sublist:
            sublistsum += num
        finalList.append(sublistsum)
    return finalList

但在现实生活中,我们应该使用sum和列表理解,这就是我们用Python编写惯用解决方案的方式:

def sumSublist(initial_list):
    return [sum(sublist) for sublist in initial_list]

无论如何,它的工作原理与预期相符:

sumSublist([[5, 4], [2, 1, 7], [1]])
=> [9, 10, 1]

相关问题 更多 >