首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用输入值Python从列表中选择max元素

使用输入值Python从列表中选择max元素
EN

Stack Overflow用户
提问于 2016-12-02 12:31:12
回答 2查看 518关注 0票数 1

我正在构建一个程序,该程序从一个列表中选择max元素,该列表与给定的输入值相加。

代码语言:javascript
运行
复制
load_data = [1, 2, 3, 4, 10, 20]

例如用户输入30选择20 and 10或用户输入35选择20, 10, 4 and 1,因为它们是可能的最大元素,可以归结为3035

代码

代码语言:javascript
运行
复制
def process(m): 
    print m


def selection():
    aux = range(len(load_data))
    global value  # <- value is the input 
    while aux and value > 0:
        posit = max(aux) >= value 
        index = aux[posit]
        elem = load_data[index]
        value = value - posit # <- subtract max value from input and repeat process 
        del aux[posit]  
        process(elem)

输出总是打印

代码语言:javascript
运行
复制
2
3
1
4
10
20
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 12:55:01

这确实是一项非常复杂的任务。这个解决方案只提供了一种基本的方法。这是很差的,在业绩方面没有经过审查。

代码语言:javascript
运行
复制
import itertools

load_data = [1, 2, 3, 4, 10, 20]
maximum = 35

def selection(data, maximum):
    for count in range(1,len(data)+1):
        for combination in itertools.combinations(data, count):
            if maximum == sum(combination):
                yield combination

i = list(selection(load_data, maximum))
print (i)

请避免使用全局变量。这是非常糟糕的风格。

票数 2
EN

Stack Overflow用户

发布于 2016-12-02 12:58:50

给你:

代码语言:javascript
运行
复制
load_data = [1, 2, 3, 4, 10, 20]
global value 
value = 30

def process(m): 
    print m

def selection():
    # make a local copy of load_data
    data = load_data[:]
    global value  # <- value is the input 
    while data and (value > 0):
        maxval = max(data)
        posix = data.index(maxval)
        if posix >=0:
            value = value - data[posix] # <- subtract max value from input and repeat process 
            process(data[posix])
            data.pop(posix)  
selection()

但正如A·格里科所说,这是一个非常简单和基本的问题。

如果load_data列表是常量的,并且始终有来自示例的元素,那么您应该先从load_data降序排序,因此更大的元素首先进行处理,以便进行优化。

即:

代码语言:javascript
运行
复制
load_data = [1, 2, 3, 4, 10, 20]
global value 
value = 30

def process(m): 
    print m

def selection():
    # make a local copy of load_data
    data = sorted(load_data[:],reverse=True)
    global value  # <- value is the input 
    for v in data:
        if value -v >= 0:        
            value -= v 
            process(v)
        if value -v == 0:
            break

selection()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40932324

复制
相关文章

相似问题

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