Да. Туплы сравниваются поэлементно.
_>А кастомную функцию сравнения все же хочется прикрутить. Потому, что порядок обхода членов кортежа при сортировке может быть разным
key — мощный и удобный инструмент для кастомных сравнений.
Здравствуйте, собственно, сабж. Имеем список кортежей чисел, все кортежи одинаковой длины, требуется выбрать из них такой кортеж a, что: a[0] > b[0] или (a[0] == b[0] и a[1] > b[1]) или (a[0] == b[0] и a[1] == b[1] и a[2] > b[2]) или ... ит.д., для любого b из этого списка при условии, что b и a — разные объекты. Надеюсь, идея понятна. Можно, конечно, сделать вот так:
def cmp_tuples(a, b):
for i in range(len(a)):
if (a[i] == b[i]):
continue
else:
return 1 - 2 * (b > a)
return 0
def max_tuple(tuples):
return sorted(tuples, cmp=cmp_tuples)[0]
,но это как-то аля маляр Шлемиль.
Стандартная функция max не принимает (в отличие от функции sort) аргумента cmp:
The optional key argument specifies a one-argument ordering function like that used for list.sort()
Есть предложения как решить задачку более кошерным методом, без полной сортировки?
Заранее благодарю
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
_>Здравствуйте, собственно, сабж. Имеем список кортежей чисел, все кортежи одинаковой длины, требуется выбрать из них такой кортеж a, что: a[0] > b[0] или (a[0] == b[0] и a[1] > b[1]) или (a[0] == b[0] и a[1] == b[1] и a[2] > b[2]) или ... ит.д., для любого b из этого списка при условии, что b и a — разные объекты. Надеюсь, идея понятна. Можно, конечно, сделать вот так:
_>Стандартная функция max не принимает (в отличие от функции sort) аргумента cmp: _>
_>The optional key argument specifies a one-argument ordering function like that used for list.sort()
_>Есть предложения как решить задачку более кошерным методом, без полной сортировки?
_>Заранее благодарю
То есть, задача — найти самый большой тупл.
max(xs)
Уж не знаю, зачем вам тут понадобилась кастомная функция сравнения.
Да.
_>А кастомную функцию сравнения все же хочется прикрутить. Потому, что порядок обхода членов кортежа при сортировке может быть разным
про max(key=...) уже сказали.
ещё есть функция reduce. До 3.0 она была builtin, а после этого переехала в модуль functools
Tuples and lists are compared lexicographically using comparison of corresponding elements. This means that to compare equal, each element must compare equal and the two sequences must be of the same type and have the same length.
If not equal, the sequences are ordered the same as their first differing elements. For example, cmp([1,2,x], [1,2,y]) returns the same as cmp(x,y). If the corresponding element does not exist, the shorter sequence is ordered first (for example, [1,2] < [1,2,3]).
Я действительно не там искал: built-in типы данных описываются в Python library reference, а операция сравнения — в Python language reference. Где разум, где логика?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)