0

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

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

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

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

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

4

3 回答 3

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]]
于 2013-11-10T05:53:12.647 回答
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]]

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

于 2013-11-10T05:44:46.770 回答
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]]
于 2013-11-10T06:33:38.193 回答