我正在构建一个程序,该程序从一个列表中选择max元素,该列表与给定的输入值相加。
load_data = [1, 2, 3, 4, 10, 20]例如用户输入30选择20 and 10或用户输入35选择20, 10, 4 and 1,因为它们是可能的最大元素,可以归结为30或35
代码
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)输出总是打印
2
3
1
4
10
20发布于 2016-12-02 12:55:01
这确实是一项非常复杂的任务。这个解决方案只提供了一种基本的方法。这是很差的,在业绩方面没有经过审查。
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)请避免使用全局变量。这是非常糟糕的风格。
发布于 2016-12-02 12:58:50
给你:
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降序排序,因此更大的元素首先进行处理,以便进行优化。
即:
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()https://stackoverflow.com/questions/40932324
复制相似问题