在嵌套列表中查找最小值(不包括零)

时间:2019-04-12 10:21:35

标签: python min

如何在此列表下方嵌套列表的列表中查找不包括零的最小值?

lst = [[1, 5, 7], [8, 6, 3], [0, 2, 4], [0, 0, 0]]  

我尝试了此功能,但显然会显示0。

lst = [[1, 5, 7], [8, 6, 3], [0, 2, 4], [0, 0, 0]]  

lst = list(map(min, *lst))
print(lst)

[0, 0, 0]

该列表应被视为

[1, 5, 7], 
[8, 6, 3], 
[0, 2, 4], 
[0, 0, 0] 

所以预期的输出应该是

[1, 2, 3]

5 个答案:

答案 0 :(得分:3)

这是一个选择:

get_object()

如果我理解正确,则您希望嵌套列表的每个“列”最少。 lst = [[1, 5, 7], [8, 6, 3], [0, 2, 4], [0, 0, 0]] m = list(min(n for n in col if n != 0) for col in zip(*lst)) print(m) # [1, 2, 3] 使您可以遍历列;然后我只选择其中的最小值。

答案 1 :(得分:3)

您可以使用嵌套列表推导,首先从嵌套列表中过滤零值,然后仅从还剩下任何元素的列表中获取最小值。

>>> lst = [[1, 5, 7], [8, 6, 3], [0, 2, 4], [0, 0, 0]]  
>>> In [3]: [min(sub) for sub in ([x for x in sub if x] for sub in zip(*lst)) if sub]
[1, 2, 3]

答案 2 :(得分:2)

lst = [[1, 5, 7], [8, 6, 3], [0, 2, 4], [0, 0, 0]]  
flat_list =[i for j in lst for i in j]
flat_list.sort()
flat_list=list(set(flat_list))
min_val = flat_list[0] if flat_list[0]!=0 else flat_list[1]
print(min_val)

答案 3 :(得分:2)

您可以结合使用poss_unarcols,过滤器(或理解)和最小值:

chain

答案 4 :(得分:1)

comprehensions:)太多了

>>> x
[[1, 5, 7], [8, 6, 3], [0, 2, 4], [0, 0, 0]]
>>> vals = map(min, [k for k in [[z for z in y if z != 0] for y in x] if k])
>>> sorted(vals)
[1, 2, 3]

太多了吗?好吧,少comprehensions:),

>>> vals = map(min, [[v for v in y if v != 0] for y in x if not all(k==0 for k in y)])
>>> sorted(vals)
[1, 2, 3]