首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到包含最小值的数组?

如何找到包含最小值的数组?
EN

Stack Overflow用户
提问于 2022-08-30 04:12:27
回答 3查看 74关注 0票数 0

我有一个数字子数组,我想找到包含最小数字的子数组。

代码语言:javascript
复制
data = [
    [10, 11],
    [93, 3], # This is the required sub-array because 3 is smaller than all the other numbers
    [33, 44, 55]
]

# tag the smallest item from each sub-array onto the front, creating a new main array
extendedData = map(lambda x:(min(x), x),data)

# use the fact that when given an array, min() will examine the first element
(smallestValueFromRow, rowContainingSmallestValue) = min(extendedData)

print(rowContainingSmallestValue)

下面是一个有用的示例:https://www.online-python.com/7O5SceGoEF

有没有一种更有效的记忆方式来解决这个问题?实际上,数组和子数组可能很大,我假设map函数复制了data数组,并应用了映射。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-30 05:30:34

您的第一个解决方案,使用map,不应该需要超过常量的额外空间,因为map返回一个生成器-它实际上不会做任何事情,直到您迭代它。

但是,您可以通过更少的输入有效地完成相同的任务:

代码语言:javascript
复制
print(min(data, key=min))
票数 2
EN

Stack Overflow用户

发布于 2022-08-30 04:36:09

下面是一个将返回包含最小值的第一个列表的解决方案:

代码语言:javascript
复制
data = [
    [10, 11],
    [93, 3], 
    [33, 44, 55]
]    

smallestNumbersFromEachSubList = [min(subList) for subList in data]
subListContainingTheSmallestNumber = data[smallestNumbersFromEachSubList.index(min(smallestNumbersFromEachSubList))]
print(subListContainingTheSmallestNumber)

这将返回:

代码语言:javascript
复制
[93, 3]
票数 1
EN

Stack Overflow用户

发布于 2022-08-30 05:11:57

由于您要求一个内存高效的实现,此方法将是常量空间。

代码语言:javascript
复制
min_num = min_idx = float("inf")
for i, nums in enumerate(data):
    local_min = min(nums)
    if local_min < min_num:
        min_idx = i
    min_num = min(min_num, local_min)
print(data[min_idx])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73537082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档