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