2016-11-18 34 views

回答

3

压扁你的清单,并然后可以使用max()内置函数:

l = [2,4,6,[5,10,3]] 


def flatten(seq): 
    for el in seq: 
    if isinstance(el, list): 
     yield from flatten(el) 
    else: 
     yield el 

print(max(flatten(l))) # 10 
+0

谢谢!:) @leaf – jasmine

1

可以更短/更好,但一个办法:

my_list = [2,4,6,[5,10,3]] 
print(max(max(x) if isinstance(x, list) else x for x in my_list)) 
+0

如果你想支持的只有一个级别flattening,你可以使用'max(max(x)if isinstance(x,list)else x for a)',这会比你的表达式更容易。 –

+0

哦,是的。编辑它是否是适当的做法? –

+0

当然可以。 :) –

1

为了找到最大值,迭代两次会给我带来额外的开销。首先,将列表展平,然后再次查找最大值。下面是创建一个递归函数返回你嵌套列表的最大值在单次迭代为例:

# The good thing is, you need not to worry about the level of depth 
# of the nested list, you can use it on any level of nested list 

def get_max(my_list): 
    m = None 
    for item in my_list: 
     if isinstance(item, list): 
      item = get_max(item) 
     if not m or m < item: 
      m = item 
    return m 

采样运行:

>>> my_list = [2,4,6,[5,10,3]] 
>>> get_max(my_list) 
10 
+2

谢谢@moinuddin – jasmine