在嵌套列表中查找不包括零的最小值
Find min value excluding zero in nested lists
如何在下面有嵌套列表的列表中找到不包括零的最小值?
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]
这是一个选项:
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]
如果我理解正确,您需要嵌套列表中每个 'column' 的最小值。 zip(*lst)
让你遍历列;然后我只是 select 中的最小值。
您可以使用嵌套列表理解,首先从嵌套列表中过滤掉零值,然后只从仍然有任何元素的列表中获取最小值。
>>> 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]
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)
您可以结合使用 chain
、过滤器(或理解)和最小值:
min(x for x in itertools.chain.from_iterable(lst) if x != 0)
有点多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]
如何在下面有嵌套列表的列表中找到不包括零的最小值?
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]
这是一个选项:
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]
如果我理解正确,您需要嵌套列表中每个 'column' 的最小值。 zip(*lst)
让你遍历列;然后我只是 select 中的最小值。
您可以使用嵌套列表理解,首先从嵌套列表中过滤掉零值,然后只从仍然有任何元素的列表中获取最小值。
>>> 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]
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)
您可以结合使用 chain
、过滤器(或理解)和最小值:
min(x for x in itertools.chain.from_iterable(lst) if x != 0)
有点多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]