python - 寻找嵌套列表中的最低值?

标签 python list int nested iterable

我正在尝试编写一个函数,它接受一个列表并可以打印该列表中的最小整数。现在我试图弄清楚在嵌套列表中该怎么做,如果最低数字位于这些嵌套列表之一中,那么总的来说它将打印该数字。我的代码在这里:

def listMin():
list2 = [3,4,[2,99,8],7]

for i in range (len(list2)):
    if type(list2[i]) == type([]):



        y=min(i)
        list2.append(y)
        print "hello"
    if len(list2)== 0:
        return None
    else:


        x= min(list2)
        print x


listMin()

虽然这看起来应该打印数字 2,但它没有,并且一旦到达嵌套列表就会给我一个错误:

TypeError: 'int' object is not iterable

我尝试了多种方法,但我很难理解为什么这种方法不起作用。

最佳答案

嵌套一深

在您的示例中,列表仅嵌套一层。如果这是一般情况,请尝试:

>>> list2 = [3,4,[2,99,8],7]
>>> min(x if isinstance(x, int) else min(x) for x in list2)
2

任意深度嵌套

如果允许更深层次的嵌套,请定义此递归函数:

>>> def rmin(lst): return min(x if isinstance(x, int) else rmin(x) for x in lst)
... 

运行中:

>>> rmin(list2)
2

或者,嵌套更深:

>>> list3 = [3,4,[[2,99],8],7]
>>> rmin(list3)
2
>>> list4 = [3, 4, [[2, [99, 1]], 8], 7]
>>> rmin(list4)
1

它是如何工作的

函数rmin由一行组成:

return min(x if isinstance(x, int) else rmin(x) for x in lst)

如您所见,这是一个列表推导式,它查看列表 lst 的每个值 x

让我们将 min 的参数分为两部分。第一个是:

x if isinstance(x, int) else rmin(x)

如果x是一个整数,则返回x。否则,它会在 x 上调用 rmin。在后一种情况下,rmin 递归地查看x中的每个值并返回最小值。

min 参数的第二部分是:

for x in lst

这只是列表理解的常见情况。它依次提取 lst 中的每个值并将其分配给 x

关于python - 寻找嵌套列表中的最低值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262370/

相关文章:

python - 如何标准化连接图边距中的直方图

python - Python 3.x 中的日志记录错误 : TypeError: a bytes-like object is required, 而不是 'str'

c# - 哪种返回类型更好? SortedSet 或已排序的列表

c# - xml列表反序列化只取一个元素

将字符串转换为 int 而不删除零

Python代码,自身未定义

python - 给定一个完全由字符串元组列表表示的线性顺序,将顺序输出为字符串列表

r - 如何将空列添加到 r 中的数据框列表

java - Java 使用 Scanner with double 时出错

python - 具有 __index__() 方法的 Python 对象示例?