我试图做一个函数,从嵌套列表返回max?

2024-04-23 06:33:44 发布

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

我写了这篇文章,它对任何事情都很好,但当我有一个空列表时 在给定列表(given_list=[[],1,2,3])中,它表示索引超出范围。有什么帮助吗?在

def r_max (given_list):
    largest = given_list[0]
    while type(largest) == type([]):
        largest = largest[0]

    for element in given_list:
        if type(element) == type([]):
            max_of_elem = r_max(element)
            if largest < max_of_elem:
                largest = max_of_elem
        else:                           # element is not a list
            if largest < element:
                largest = element

    return largest

Tags: of列表ifdeftypeelement事情max
3条回答

假设给定的_列表至少有一个元素是不正确的。 为了避免索引超出范围,可以添加

if (len(given_list) == 0)
  return None

开始你的工作。在

该错误表示索引超出范围,这是示例的第一个元素的情况。解决方案是不迭代长度为零的列表:

def r_max (given_list):
    largest = given_list[0]
    while type(largest) == type([]):
        largest = largest[0]

    for element in given_list:
        if type(element) == type([]):
            # If the list is empty, skip
            if(len(elemnt) == 0)
                next
            max_of_elem = r_max(element)
            if largest < max_of_elem:
                largest = max_of_elem
        else:                           # element is not a list
            if largest < element:
                largest = element

    return larges

当你在做的时候,你可能想要assert len(given_list)>0或者其他类似的东西。在

如果嵌套任意深,首先需要递归来解开它:

def items(x):
    if isinstance(x, list):
        for it in x:
            for y in items(it): yield y
    else: yield x

现在,max(items(whatever))可以正常工作。在

在python3的最新版本中,可以通过改变

^{pr2}$

进入:

        for it in x: yield from it

相关问题 更多 >