2016-04-13 6 views
1

все! я застрял с такой проблемой: Я создал архивный список из двух разделенных списка, что я inputingКак найти элемент списка zipped, который имеет максимальное значение для разделения его парных элементов?

if __name__ == "__main__": 
    data = list(map(int, sys.stdin.read().split())) 
    n, capacity = data[0:2] 
    values = data[2:(2 * n + 2):2] 
    weights = data[3:(2 * n + 2):2] 
    ziplist = list(zip(values,weights)) 
    opt_value = get_optimal_value(capacity, weights, values) 

Итак, как я набрав

3 40 
20 40 
50 60 
70 80 

я получил такой список

[(20, 40), (50, 60), (70, 80)] 

Теперь мне нужно понять, что элемент этого zip-списка имеет максимальное значение деления каждой пары.

m = list(x/y for x,y in ziplist) 

И результат:

[0.5, 0.8333333333333334, 0.875] 

Таким образом, очевидно, что мне нужно работать с последней парой. Но как я должен правильно его кодировать? Я хочу избежать использования дополнительного списка m. В общем, мне нужно найти индекс zipped list ->, а затем взять из этого элемента значение веса. Итак, мой конечный результат будет равен 80.

Кроме того, я думаю, что я мог пойти не так, потому что на самом деле, я пытаюсь решить проблему с дробным рюкзаком, поэтому я пытаюсь найти элемент с наилучшим соотношением от его веса и стоимости.

+0

вы можете сделать 'max ([x/y для x, y в ziplist])' –

+0

Как вы получили свое разделение целые числа для получения результатов поплавка? –

+0

@ScottHunter Это поведение деления в Python 3 (оператор '//' будет генерировать целочисленные результаты). – larsks

ответ

1

Чтобы получить индекс наибольшего элемента списка чисел можно применить следующую

argmax = max(enumerate(list_of_numbers), key=lambda x: x[1])[0] 

Что это делает конвертировать список номеров в список кортежей (индекс, значение) пар , а затем выберите пару, второе значение которой является максимальным. Затем он берет первое значение из этой пары (индекс) и сохраняет его в переменной argmax

+0

Очень приятно, именно то, что я хотел ответить. Но я бы прямо написал '... enumerate (x/y для x, y в ziplist) ...', чтобы избежать создания нового именованного списка в памяти, но напрямую использовать неназванный генератор. –

 Смежные вопросы

  • Нет связанных вопросов^_^