簡體   English   中英

使用輸入值Python從列表中選擇最大元素

[英]Selecting max elements from list using input value Python

我正在構建一個程序,該程序從列表中選擇最大元素,這些元素總和為給定的輸入值

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

例如,用戶輸入30選擇20 and 10或者用戶輸入35選擇20, 10, 4 and 1因為它們是可能合計3035最大元素

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

這確實是一個非常復雜的任務。 該解決方案僅提供基本方法。 它很差,例如在性能方面沒有得到審查。

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)

並且請避免使用全局變量。 這是非常糟糕的風格。

這個給你:

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. Grieco所說,這是解決問題的非常簡單和基本的方法。

如果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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM