从和为X的数组中获取数字列表

2024-04-24 15:15:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数字,比如说27和一个NumbersList的列表。如何从NumbersList中获得一些选择的数字,其中一些是27。并使用NumbersList中最大的数字 这可以通过抛开所有的可能性来实现,但在内心深处,我知道有一个简单的解决方案,我想得太多了

#available numbers
NumbersList = [1,5,9,4,6,8,12,12,1,3,6,8,7,8,2]

def GetNumbers(number):
    global NumbersList
    tmpList = []

    #Some magical code

    return tmpList


#now result have
result = GetNumbers(27)
# result is  [12, 12, 3]
# 12+12+3 using most possible greater numbers from "NumbersList"

Tags: number列表defmagical数字someresult解决方案
2条回答

你可以试试

NumbersList = [1,5,9,4,6,8,12,12,1,3,6,8,7,8,2]

def GetNumbers(number):        
    result = []
    for i in sorted(NumbersList, reverse=True):
        if sum(result) + i <= number:
            result.append(i)
    return result

或者,如果NumbersList较大,则可以通过

def GetNumbers(number):
    result = []
    for i in sorted(NumbersList, reverse=True):
        sum_list = sum(result)
        if sum_list + i == number:
            result.append(i)
            return result
        elif sum_list + i < number:
            result.append(i)
    return result

print(GetNumbers(27))

输出

[12, 12, 3]

这是一种方法

NumbersList = [1,5,9,4,6,8,12,12,1,3,6,8,7,8,2]

def GetNumbers(NumbersList, number):
    tmpList = []
    summ = 0
    srtd = sorted(NumbersList)
    for i in range(len(srtd)-1, 0, -1):
        if summ + srtd[i] > number:
            break
        summ += srtd[i]
        tmpList.append(srtd[i])
    for i in range(len(NumbersList)):
        if NumbersList[i] == number - summ:
            tmpList.append(NumbersList[i])
    if sum(tmpList) == number:
        return tmpList
    else:
        return None

result = GetNumbers(NumbersList, 27)
print(result)

当然不是最好的,但这一次做得很好

首先,对列表进行排序,找出所有不超过限制的最大数字。然后你找到丢失的号码。 如果存在,则返回数组。 如果没有,我们将不返回

这段代码并不适用于所有情况,但它是一个很好的开始

最简单的方法是对列表排序,向后循环,然后

下一个号码还有空位吗

  • 如果有,您可以将其添加到列表中
  • 如果没有,跳过

最后,您应该检查您的tmpList之和。有可能其总和为!=您的预定号码

相关问题 更多 >