Вернуть мин / макс многомерного в Python? - PullRequest
6 голосов
/ 16 декабря 2011

У меня есть список в виде

[ [[a,b,c],[d,e,f]] , [[a,b,c],[d,e,f]] , [[a,b,c],[d,e,f]] ... ] etc.

Я хочу вернуть минимальное значение c и максимальное значение c + f.Возможно ли это?

Ответы [ 5 ]

15 голосов
/ 16 декабря 2011

Для минимума c:

min(c for (a,b,c),(d,e,f) in your_list)

Для максимума c+f

max(c+f for (a,b,c),(d,e,f) in your_list)

Пример:

>>> your_list = [[[1,2,3],[4,5,6]], [[0,1,2],[3,4,5]], [[2,3,4],[5,6,7]]]
>>> min(c for (a,b,c),(d,e,f) in lst)
2
>>> max(c+f for (a,b,c),(d,e,f) in lst)
11
4 голосов
/ 16 декабря 2011

Понимание списка на помощь

a=[[[1,2,3],[4,5,6]], [[2,3,4],[4,5,6]]]
>>> min([x[0][2] for x in a])
3

>>> max([x[0][2]+ x[1][2] for x in a])
10
1 голос
/ 16 декабря 2011

предположим, что ваш список хранится в my_list:

min_c = min(e[0][2] for e in my_list)
max_c_plus_f = max(map(lambda e : e[0][2] + e[1][2], my_list))
1 голос
/ 16 декабря 2011

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

for each of the pairs
    if c is less than minimum c so far
       make minimum c so far be c
    if (c+f) is greater than max c+f so far
       make max c+f so far be (c+f)
1 голос
/ 16 декабря 2011

Вы должны сопоставить свой список с списком, содержащим только те элементы, которые вам нужны.

Вот один из возможных способов сделать это:

x = [[[5, 5, 3], [6, 9, 7]], [[6, 2, 4], [0, 7, 5]], [[2, 5, 6], [6, 6, 9]], [[7, 3, 5], [6, 3, 2]], [[3, 10, 1], [6, 8, 2]], [[1, 2, 2], [0, 9, 7]], [[9, 5, 2], [7, 9, 9]], [[4, 0, 0], [1, 10, 6]], [[1, 5, 6], [1, 7, 3]], [[6, 1, 4], [1, 2, 0]]]

minc = min(l[0][2] for l in x)
maxcf = max(l[0][2]+l[1][2] for l in x)

Содержимое вызовов min и max является так называемым "генератором" и отвечает за генерацию отображения исходных данных в отфильтрованные данные.

...