Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 3, 2013 16:03:14

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

GGnoob
Лови жесть :)

Выводит строку с max ценой, если max цен несколько, то выводит строку с max ценой и max комиссией

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)

Офлайн

#2 Окт. 4, 2013 09:05:25

GGnoob
Зарегистрирован: 2013-10-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

wbt
А не могли бы объяснить словами подобную запись?) Честно сказать, не до конца улавоиваю логики.sorted - сортировкаbig_dict - словарьkey = функция для ключа. можно напсисать функцию, а можно использовать лямбдуlambda x: (a,b) - кортеж, который возвращается, первым значением идёт цена, вторым - комиссия. По этому принципу они и будут сортироваться
Хм, теперь более понятно. Но если в будующем добавятся еще 1-2 столбца, которые будут анализироваться таким же образом (т.е. по приоритету), то, я как я понимаю, так же уже решить не получиться?

Офлайн

#3 Окт. 4, 2013 09:13:54

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

GGnoob
Хм, теперь более понятно. Но если в будующем добавятся еще 1-2 столбца, которые будут анализироваться таким же образом (т.е. по приоритету), то, я как я понимаю, так же уже решить не получиться?

Числовые записи можно сортировать по-разному, делая минус: например, собрать во такой кортеж

def srt(…): return (a,-b,c,-d)

для строковых… в python 2 есть ещё cmp. в python3… в python3 нет cmp



Бейсик - не порок, Гвидо - не пророк

Офлайн

#4 Окт. 4, 2013 11:29:04

GGnoob
Зарегистрирован: 2013-10-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

wbt
Немного более глобальный вопрос: для чего вообще сортировать? Простите, но я видимо чего-то не догоняю. В конечном результате мне нужно получить номер искомой строки из файла. Как после сортировок сохранить нумерацию строк в файле?

Офлайн

#5 Окт. 4, 2013 11:38:16

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

> Немного более глобальный вопрос: для чего вообще сортировать?

чтобы узнать, какие данные больше, а какие - меньше

> В конечном результате мне нужно получить номер искомой строки из файла. Как после сортировок сохранить нумерацию строк в файле?

если нужны номера строки, надо её заранее туда записывать (например, enumerate)

хотя, если требуются просто номера, то можно и простеньким циклом for пробежаться. просто сортировка - это одна строка с лямбдой, просто записывать, просто читать.

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



Бейсик - не порок, Гвидо - не пророк

Офлайн

#6 Окт. 4, 2013 12:02:37

GGnoob
Зарегистрирован: 2013-10-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

wbt
я, впрочем, не особо понимаю, какие там строки, и что нужно получить, просто даю универсальный совет.
Грубо говоря. в файле имеется таблица:
Name Price$ Com.%
1.| name1 34.4$ 9%
2.| name2 10.0$ 7%
3.| name3 0.2$ 7%
4.| nameN 34.4$ 5%
Для двух столбцов Вы предложили использование словарей и кортежей. Но возможно добавятся еще 1-2 столбца. И вот тут то у меня и возникает проблема с алгоритмом и реализацией нужной строки.
Допустим, я с начала записываю все столбцы в списки. Нахожу в первом списке максимальные значения и, если их несколько, перехожу ко второму списку и так далее до последнего столбца. Но с с этим переход и возникает проблема - ведь нужно уже искать максимальное значение не во всем списке, а в тех индексах(строках файла), которые прошли первый отбор. И еще не потерять номер строки. В общем, как-то так я себе это представляю

Офлайн

#7 Окт. 4, 2013 12:07:15

GGnoob
Зарегистрирован: 2013-10-01
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

Budulianin
Лови жесть
Действительно, для меня жесть. До lambda функций еще не дошел). И как я понял, выведется сама строка, но номер ее не запомниться?

Офлайн

#8 Окт. 4, 2013 12:09:30

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

Список - один. А что в нём хранится, список или словарь, не имеет значения.

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

Можно делать не список, а словарь, если нужен идентификатор. Ключ - номер строки, значение - списки. получится типа (я ключи храню строками, для совместимости с json, поэтому лучше их по требованию туда-сюда конвертировать):

{ "1": ["name1", 34.4, 9.0],
"2": ["name2", 34.4, 9.1] ...}

и какая разница, что туда будет добавляться. ну добавится, скажем, city

{ "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])



Бейсик - не порок, Гвидо - не пророк

Офлайн

#9 Окт. 4, 2013 12:11:42

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

GGnoob
Действительно, для меня жесть. До lambda функций еще не дошел). И как я понял, выведется сама строка, но номер ее не запомниться?

А что до них доходить. Это как

def x(a): 
return (a[0],a[1])

равно

x = lambda a: (a[0],a[1])



Бейсик - не порок, Гвидо - не пророк

Офлайн

#10 Окт. 4, 2013 12:53:53

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Python 3 Удаление лишнего символа у каждого элемента списка

GGnoob
И как я понял, выведется сама строка, но номер ее не запомниться?
GGnoob
Мне нужно найти такую строку в файле,
Я делал, то что написано :)


Чуть-чуть подправил свой скрипт, теперь выводится список с 3я значениями, номер строки - последний элемент

#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('.', ','))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version