我有一个列表列表,我们称之为数组:
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>
答案 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]]