Как найти максимальное число в этом типе структуры данных в Python - PullRequest
1 голос
/ 14 марта 2012

Я не совсем уверен, как называется этот тип структуры данных (таблица ??),

T = [[(0, ''), (-1, '<'), (-2, '<')], [(-1, '^'), (1, '\\'), (0, '\\')], [(-2, '^'), (5, '^'), (0, '\\')]]

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

T[2][2][1]

вернется

'\ \'

В приведенном выше примере я бы искал

T[2][1][0]

который вернет

5

Любая помощь очень ценится:)

Ответы [ 4 ]

2 голосов
/ 14 марта 2012

Вот довольно лаконичный метод:

max((k, (i, j)) for i, lst in enumerate(T) for j, (k, _) in enumerate(lst))

Для ваших образцов данных:

>>> T = [[(0, ''), (-1, '<'), (-2, '<')], [(-1, '^'), (1, '\\'), (0, '\\')], [(-2, '^'), (5, '^'), (0, '\\')]]
>>> max((k, (i, j)) for i, lst in enumerate(T) for j, (k, _) in enumerate(lst))
(5, (2, 1))
>>> T[2][1]
(5, '^')
0 голосов
/ 14 марта 2012
T=[[(0, ''), (-1, '<'), (-2, '<')], [(-1, '^'), (1, '\\'), (0, '\\')], [(-2, '^'), (5, '^'), (0, '\\')]]

m, ma, mb=None, 0, 0
for a in xrange(len(T)):
        for b in xrange(len(T[a])):
                if m is None or T[a][b] > m:
                        m, ma, mb=T[a][b], a, b

print m, ma, mb

Будет напечатано

(5, '^') 2 1
0 голосов
/ 14 марта 2012

Домашнее задание, а? Вот несколько подсказок:

  • перебрать список и список и сравнить 0-е значения

  • перечислить ваш друг

Не домашняя работа? Хорошо, вот решение:)

high = 0
index = None
for i, lst in enumerate(T):
    for j, tpl in enumerate(lst):
        current = T[i][j][0]
        if current > high:
            index = i, j, 0
        high = max(high, current)

print index
0 голосов
/ 14 марта 2012

Старый добрый путь?

def find_max(table):
    max_val = table[0][0][0] # something to start with
    max_index = (0, 0)
    for l in table:
        for t in l:
            if t[0] > max_val:
                max_val = t[0]
                max_index = (table.index(l), l.index(t))
    return (max_val, max_index)
...