Найти минимальное значение, исключая ноль во вложенных списках - PullRequest
0 голосов
/ 12 апреля 2019

Как найти минимальные значения, исключая ноль, в этом списке, который имеет вложенные списки ниже?

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 ]

3 голосов
/ 12 апреля 2019

Вы можете использовать понимание вложенного списка, сначала отфильтровывая нулевые значения из вложенных списков и получая только минимальные значения из списков, в которых еще остались какие-либо элементы.

>>> 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]
3 голосов
/ 12 апреля 2019

это опция:

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]

если я правильно понимаю, вы хотите минимум каждого «столбца» вашего вложенного списка. zip(*lst) позволяет перебирать столбцы; тогда я просто выбираю минимум из них.

2 голосов
/ 12 апреля 2019

Вы можете использовать комбинацию chain, фильтр (или понимание) и мин:

min(x for x in itertools.chain.from_iterable(lst) if x != 0)
2 голосов
/ 12 апреля 2019
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)
1 голос
/ 12 апреля 2019

Слишком много 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]
...