使用Max Element打印列表(Python)

时间:2013-11-10 05:37:51

标签: python sorting max nested-lists

我有一个列表列表,我们称之为数组:

array=[[1,2,3,4],[2,3,4,5],[1,3,4,5]]

我需要能够返回最大数量的列表。在这种情况下,我需要返回[2,3,4,5]和[1,3,4,5]

如果我做max(数组),我会得到2,因为它只查看每个列表的第0个元素。

我知道这是一个基本问题,但是我尝试使用for循环来解决这个问题30分钟,找到每个列表的最大值的索引,然后返回相关列表,但它不起作用/效率非常低。 / p>

3 个答案:

答案 0 :(得分:2)

# take the maximum from each tuple
>>> m1 = map(lambda tup: max(tup), array)
# take the maximum of all maximums
>>> m = max(m1)
# choose only tuples that contains m
>>> [tup for tup in array if m in tup]
[[2, 3, 4, 5], [1, 3, 4, 5]]

答案 1 :(得分:1)

array=[[1,2,3,4],[2,3,4,5],[1,3,4,5]]
max_lists = []
max_element = 0 # Considering only positive elements
for arr in array:
    cur_max = max(arr)
    if cur_max > max_element: # We find a new maximum
        max_element = cur_max
        max_lists = [arr]     # Forget previous list & create new one
    elif cur_max == max_element:
        max_lists.append(arr) # Lists with same maximum (till now)

print(max_lists)

输出上述代码

[[2, 3, 4, 5], [1, 3, 4, 5]]

注意 - 这可能不是最有效的,但我当然希望它很容易理解! :)

答案 2 :(得分:1)

你也可以在一条短线(具有极高的性能)中进行如下操作:

>>> import numpy as np
>>> a = np.asarray([[1,2,3,4],[2,3,4,5],[1,3,4,5]])

>>> a[np.nonzero(a==a.max())[0]]                    #really short

[[2 3 4 5]
 [1 3 4 5]]