如何在Python中找到此类数据结构的最大数量

时间:2012-03-13 20:11:41

标签: python list tuples

我不完全确定这种类型的数据结构的名称(表??),

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

无论如何,我们在大学里使用它来处理某种类型的程序,但这并不重要,基本上我已经完成了一个非常复杂的程序,它使用了这种类型的数据结构,但现在我需要编写另一个执行非常相似的程序,如果有一种方法可以从列表列表中获取该元组列表中的最大数量,以及该值的索引,那么它基本上可以节省大量工作。此外,元组或列表的数量不固定,这将根据放入程序的字符串的长度而改变。同样重要的是要注意我不只是寻找最大数量,而是寻找该数字的索引。 有了这种类型的数据结构,

T[2][2][1]

将返回

'\ \'

在我上面给出的例子中,我将寻找

T[2][1][0]

会返回

5

非常感谢任何帮助:)

4 个答案:

答案 0 :(得分:2)

这是一个非常简洁的方法:

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, '^')

答案 1 :(得分:0)

好老路?

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)

答案 2 :(得分:0)

家庭作业,是吗?这里有一些线索:

  • 遍历列表和列表,并比较第0个值

  • enumerate是你的朋友

不是作业?好的,这是一个解决方案:)

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

答案 3 :(得分:-1)

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