Форум сайта python.su
33
GGnoobЛови жесть :)
import re price_and_com = [] for line in re.findall(r'[0-9,]+?\s[0-9,]+', open('input.txt').read()): line = map(float, line.replace(',','.').split()) price_and_com.append(line) with open('output.txt', 'w') as f_out: max_price_and_com = max(price_and_com) if price_and_com.count(max_price_and_com) > 1: f_out.write(str(max(l, lambda x: x[1]\ if max(l)[0]==x[0] else None).replace('.',','))) else: f_out.write(str(max_price_and_com).replace('.', ','))
Отредактировано Budulianin (Окт. 3, 2013 16:07:23)
Офлайн
0
wbtХм, теперь более понятно. Но если в будующем добавятся еще 1-2 столбца, которые будут анализироваться таким же образом (т.е. по приоритету), то, я как я понимаю, так же уже решить не получиться?
А не могли бы объяснить словами подобную запись?) Честно сказать, не до конца улавоиваю логики.sorted - сортировкаbig_dict - словарьkey = функция для ключа. можно напсисать функцию, а можно использовать лямбдуlambda x: (a,b) - кортеж, который возвращается, первым значением идёт цена, вторым - комиссия. По этому принципу они и будут сортироваться
Офлайн
6
GGnoob
Хм, теперь более понятно. Но если в будующем добавятся еще 1-2 столбца, которые будут анализироваться таким же образом (т.е. по приоритету), то, я как я понимаю, так же уже решить не получиться?
Офлайн
0
wbtНемного более глобальный вопрос: для чего вообще сортировать?
Простите, но я видимо чего-то не догоняю. В конечном результате мне нужно получить номер искомой строки из файла. Как после сортировок сохранить нумерацию строк в файле?
Офлайн
6
> Немного более глобальный вопрос: для чего вообще сортировать?
чтобы узнать, какие данные больше, а какие - меньше 
> В конечном результате мне нужно получить номер искомой строки из файла. Как после сортировок сохранить нумерацию строк в файле?
если нужны номера строки, надо её заранее туда записывать (например, enumerate)
хотя, если требуются просто номера, то можно и простеньким циклом for пробежаться. просто сортировка - это одна строка с лямбдой, просто записывать, просто читать.
я, впрочем, не особо понимаю, какие там строки, и что нужно получить, просто даю универсальный совет.
Офлайн
0
wbtГрубо говоря. в файле имеется таблица:
я, впрочем, не особо понимаю, какие там строки, и что нужно получить, просто даю универсальный совет.
Офлайн
0
BudulianinДействительно, для меня жесть
Лови жесть
. До lambda функций еще не дошел). И как я понял, выведется сама строка, но номер ее не запомниться?
Офлайн
6
Список - один. А что в нём хранится, список или словарь, не имеет значения.
Сортируется большой список. Ключи сортировки - элементы того, что распарсилось.
Можно делать не список, а словарь, если нужен идентификатор. Ключ - номер строки, значение - списки. получится типа (я ключи храню строками, для совместимости с json, поэтому лучше их по требованию туда-сюда конвертировать):
{ "1": ["name1", 34.4, 9.0],
"2": ["name2", 34.4, 9.1] ...}{ "1": ["name1", "Tokyo", 34.4, 9.0],
"2": ["name2", "Paris", 34.4, 9.1] ...}lambda a: (a[1], a[2])
lambda a: (a[2], a[3])
Офлайн
6
GGnoob
Действительно, для меня жесть. До lambda функций еще не дошел). И как я понял, выведется сама строка, но номер ее не запомниться?
def x(a):
return (a[0],a[1])
x = lambda a: (a[0],a[1])
Офлайн
33
GGnoob
И как я понял, выведется сама строка, но номер ее не запомниться?
GGnoobЯ делал, то что написано :)
Мне нужно найти такую строку в файле,
#coding: utf-8 import re import itertools as I price_and_com = [] count = I.count(1) for line in re.findall(r'[0-9,]+?\s[0-9,]+', open('input.txt').read()): line = map(float, line.replace(',','.').split()) line.append(count.next())# в Python 3.x count.__next__() price_and_com.append(line) with open('output.txt', 'w') as f_out: max_price_and_com = max(price_and_com) if price_and_com.count(max_price_and_com) > 1: f_out.write(str(max(l, lambda x: x[1]\ if max(l)[0]==x[0] else None).replace('.',','))) else: f_out.write(str(max_price_and_com).replace('.', ','))
Офлайн