我有一个列表列表,我们称之为数组:
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 循环来解决这个问题,该循环找到每个列表的最大值的索引,然后返回相关列表,但它不起作用/效率很低。
我有一个列表列表,我们称之为数组:
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 循环来解决这个问题,该循环找到每个列表的最大值的索引,然后返回相关列表,但它不起作用/效率很低。
# 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]]
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]]
注意 - 这可能不是最有效的,但我当然希望它很容易理解!:)
您也可以只用一条短线(具有极高的性能)来执行此操作,如下所示:
>>> 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]]