2016-11-07 5 views
1

Я пытаюсь перебирать список кортежей, как это:Выбор наименьшего значения из списка координат кортежей

[(0, 0.0083553666846612491), (1, 0.0054999681509501821)] 

и найти наименьшее значение на правой стороне кортежа, а затем сохранить сопровождающее значение левой стороны переменной.

Каким будет наилучший способ решить эту проблему?

ответ

2

Вы можете использовать key аргумент функции min() найти кортеж с наименьшим вторым значением:

>>> l = [(0, 0.0083553666846612491), (1, 0.0054999681509501821)] 
>>> smallest = min(l, key=lambda x: x[1])[0] 
>>> smallest 
1 

Здесь лямбда-выражение используется для выбора второго элемента каждого кортежа и min использует это значение в его сравнениях. min() возвращает полный кортеж, поэтому вы можете извлечь первый элемент, используя [0].

Вы также можете использовать operator.itemgetter:

>>> from operator import itemgetter 
>>> smallest = min(l, key=itemgetter(1))[0] 
>>> smallest 
1 
0

Это должно работать:

min_tuple = min(your_list, key=lambda item: item[1]) 

Таким образом, мы обеспечиваем способ кортежа comparition

+0

Вы были, как только 3 минуты поздно. Как правило, я бы поднял оба ответа, но [mhawke] (http://stackoverflow.com/a/40456054/1218980) предоставил гораздо больше деталей, пока вы их не предоставили. Настоятельно рекомендуется предоставить описание предлагаемого вами решения, а не только однострочный. –

+1

Я использовал приложение для телефона, где каждое письмо подсчитывается (кто любит писать эссе на телефоне). Спасибо за предложение. – woockashek

+0

Да, написание ответов на телефон далек от лучших. –