Найти - Пользователи
Полная версия: Python 3 Удаление лишнего символа у каждого элемента списка
Начало » Python для новичков » Python 3 Удаление лишнего символа у каждого элемента списка
1 2 3 4
Budulianin
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('.', ','))
GGnoob
wbt
А не могли бы объяснить словами подобную запись?) Честно сказать, не до конца улавоиваю логики.sorted - сортировкаbig_dict - словарьkey = функция для ключа. можно напсисать функцию, а можно использовать лямбдуlambda x: (a,b) - кортеж, который возвращается, первым значением идёт цена, вторым - комиссия. По этому принципу они и будут сортироваться
Хм, теперь более понятно. Но если в будующем добавятся еще 1-2 столбца, которые будут анализироваться таким же образом (т.е. по приоритету), то, я как я понимаю, так же уже решить не получиться?
wbt
GGnoob
Хм, теперь более понятно. Но если в будующем добавятся еще 1-2 столбца, которые будут анализироваться таким же образом (т.е. по приоритету), то, я как я понимаю, так же уже решить не получиться?

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

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

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

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

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

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

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

я, впрочем, не особо понимаю, какие там строки, и что нужно получить, просто даю универсальный совет.
GGnoob
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 столбца. И вот тут то у меня и возникает проблема с алгоритмом и реализацией нужной строки.
Допустим, я с начала записываю все столбцы в списки. Нахожу в первом списке максимальные значения и, если их несколько, перехожу ко второму списку и так далее до последнего столбца. Но с с этим переход и возникает проблема - ведь нужно уже искать максимальное значение не во всем списке, а в тех индексах(строках файла), которые прошли первый отбор. И еще не потерять номер строки. В общем, как-то так я себе это представляю
GGnoob
Budulianin
Лови жесть
Действительно, для меня жесть. До lambda функций еще не дошел). И как я понял, выведется сама строка, но номер ее не запомниться?
wbt
Список - один. А что в нём хранится, список или словарь, не имеет значения.

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

Можно делать не список, а словарь, если нужен идентификатор. Ключ - номер строки, значение - списки. получится типа (я ключи храню строками, для совместимости с 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])
wbt
GGnoob
Действительно, для меня жесть. До lambda функций еще не дошел). И как я понял, выведется сама строка, но номер ее не запомниться?

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

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

равно

x = lambda a: (a[0],a[1])
Budulianin
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('.', ','))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB