Форум сайта python.su
33
GGnoob
Допустим, я с начала записываю все столбцы в списки. Нахожу в первом списке максимальные значения и, если их несколько, перехожу ко второму списку и так далее до последнего столбца.
Офлайн
0
BudulianinНу эт я в общий алгоритм описал. А вот есть такая загвоздка в нем: после того, как я нахожу максимальные элементы в первом столбце-списке, как найти наксимальные елементы во втором столбце, но уже только среди тех элементов, которые находятся на одной строке с элементами из 1го столбца и то же самое для 3го столбца, т.е. мне надо как-то номер строки постоянно “держать в уме”. В общем думаю понятно объяснил
Отредактировано GGnoob (Окт. 5, 2013 17:01:59)
Офлайн
33
GGnoob
lst = [(1,2), (10,-1)] max(lst, key=lambda x: x[1]) >>>(1, 2)
Отредактировано Budulianin (Окт. 5, 2013 18:47:54)
Офлайн
857
GGnoob
Есть еще один вопрос немного по другой теме: в файле имеется еще один столбец с % комиссий. Мне нужно найти такую строку в файле, у которой будет наивысшее значение в столбце “цена”, но если наивысших значений несколько, то нужно найти еще наивысшую комиссию (т.е. искомой будет строка в файле и с наивысшей ценой, и с наивысшей комиссией, если наивысших цен несколько). Как подобное можно реализовать?
GGnoob
А вот есть такая загвоздка в нем: после того, как я нахожу максимальные элементы в первом столбце-списке, как найти наксимальные елементы во втором столбце, но уже только среди тех элементов, которые находятся на одной строке с элементами из 1го столбца и то же самое для 3го столбца, т.е. мне надо как-то номер строки постоянно “держать в уме”.
Budulianinиспользуй next(count), методы типа __name__() для того и названы так, чтобы их не вызывали вручнуюline.append(count.next())# в Python 3.x count.__next__()
Budulianinможно попробовать за один проход
Можешь использовать функцию max задав принцип выбора, через key.
>>> (4, 3) < (5, 2) True >>> (5, 3) < (5, 2) False >>> (5, 3) < (5, 4) True >>>
>>> p = max([(4, 3), (5, 2), (5, 3), (5, 4), (5, 2), (5, 3)]) >>> print(p) (5, 4) >>>
>>> lst = [(4, 3), ... (5, 2), ... (5, 3), ... (5, 4), ... (5, 2), ... (5, 3)] >>> >>> p = max(enumerate(lst, 1), key=lambda i: i[1]) >>> print(p) (4, (5, 4)) >>>
>>> import operator >>> >>> lst = [(4, 3), ... (5, 2), ... (5, 3), ... (5, 4), ... (5, 2), ... (5, 3)] >>> >>> p = max(enumerate(lst, 1), key=operator.itemgetter(1)) >>> print(p) (4, (5, 4)) >>>
Отредактировано py.user.next (Окт. 6, 2013 07:29:52)
Офлайн
33
py.user.next
Budulianin
line.append(count.next())# в Python 3.x count.__next__()
используй next(count), методы типа __name__() для того и названы так, чтобы их не вызывали вручную
BudulianinДа, убрал условие, так же норм отрабатывает, спасибо
в принципе, key даже не нужен
Отредактировано Budulianin (Окт. 6, 2013 14:44:24)
Офлайн
857
Budulianinи для .next() и для __next__() тем более вызывай глобальную функцию next()
Коммент читай, в 3.x у Count() нету метода next, только __next__, поэтому решил его написать
Отредактировано py.user.next (Окт. 6, 2013 22:30:21)
Офлайн
33
py.user.nextДа, там built-in function next, не знал, не пользуюсь 3.x
вызывай глобальную функцию next()
Офлайн
857
Budulianinв python 2.6 тоже есть
Да, там built-in function next, не знал, не пользуюсь 3.x
Офлайн
33
py.user.next
в python 2.6 тоже есть
Офлайн
0
Спасибо py.user.next и Budulianin за полезные советы! 
Отредактировано GGnoob (Окт. 8, 2013 10:44:15)
Офлайн