Gennady
children_list.sort(key=lambda child: child.apples, reverse=True)
# Вася Пупкин = 7 # Петя Пяточкин = 2 # Вася Пяточкин = 1 class Children(object): def __init__(self, username, last_name, apples): self.username = username self.last_name = last_name self.apples = apples children_list = [ Children('Вася', 'Пупкин', 5), Children('Петя', 'Пяточкин', 2), Children('Вася', 'Пупкин', 2), Children('Вася', 'Пяточкин', 1) ] children_list.sort(key=lambda child: child.apples, reverse=True) for ch in children_list: print(ch.__dict__) Немного не то) Сортировка происходит - это да. Но Объекты не объединяются {'username': 'Вася', 'last_name': 'Пупкин', 'apples': 5} {'username': 'Петя', 'last_name': 'Пяточкин', 'apples': 2} {'username': 'Вася', 'last_name': 'Пупкин', 'apples': 2} {'username': 'Вася', 'last_name': 'Пяточкин', 'apples': 1}
Gennady
Я просто уже голову поломал. Единственое как придумал - это переписать список в какой-нибудь sqlite. Там посличать и собрать его заново. Но это ужасно)
Саня
а в цикле все перебрать, и в новый списко закинуть, не катит?
Gennady
а в цикле все перебрать, и в новый списко закинуть, не катит?
Можно и цикл. Но нужно правильное условие. Предположим что он сортирован по имя фамилия. А дальше? Если один и тот же чувак встретился n раз
Саня
да сортировать не нужно. Берем первое ФИО, записываем в новый лист. Пробегаемся по старому листу, и ищем там такие же ФИО. Если нашли, прибавляем значения. Я бы еще для ускорения удалял из старого списка занчения, которые посчитали
Саня
а потом уже сортировать новый список по значению. Но в этом я уже не шарю.
Mr Smith
как по-быстрее найти пропущенное число в отсортированном списке из 100к+ элементов? пробовал binary search ( думаю замедление из-за слайсов, создающих каждый раз новые списки) и bisection (встроенный bisect модуль) - всеравно выхожу за рамки по времени
Aragaer
пропущенное в смысле должны быть все числа, но одного не хвтает?
Mr Smith
да
Aragaer
а что за слайсы?
Aragaer
в смысле зачем они для бинарного поиска?
Aragaer
и зачем модуль вообще?
Mr Smith
ну когда пополам список делишь при BS...list[:mid] vs list[mid:]
Aragaer
а зачем это делать?
Aragaer
просто иди в одну или другую половину
Mr Smith
так в смысле идти
Aragaer
в смысле mid меняешь
Mr Smith
я рекурсивно делаю, подпихваю в ту же функцию половинку полученную слайсом
Mr Smith
а как лучше?
Aragaer
вообще классический вариант это иметь два индекса, один из которых указывает на левый край, а другой на правый
Mr Smith
ну...а поиск-то сам, list[left:right] всеравно ведь
Aragaer
нет
Aragaer
я вот сейчас вообще без рекурсии сделал
Aragaer
http://codephoto.ru/i/fbfoe
Mr Smith
https://www.geeksforgeeks.org/python-program-for-binary-search/
Mr Smith
вот так итеративно можно
Mr Smith
угу. ща попробую спасиб
Aragaer
ну и рекурсивно тоже так можно, если передавать в рекурсию весь список целиком и пару индексов
Aragaer
но все равно, сходящиеся индексы это правильная реализация - в те времена, когда этот алгоритм придумали, никто не пытался копировать списки
Andrew
peewee Ребята подскажите есть функция def delete_string(url): mystring = query.get(query.fullink == url) mystring.delete_instance() return print('Удалено из базы: ' + url) вызываю ее в другой функции r = requests.get(url, ...) if r.status_code in [200]: f = open('..') f.write(r.text) f.close() print('Ok') delete_string(url) time.sleep(2) почему в консоли не выводит return print('Удалено из базы: ' + url) при выполнении хотя print('Ok') выводит возможно что долго ищет строку в базе? необходимо в функции делать коонект db.connect()?
Boriskas
Насколько я помню он и не должен печатать
Andrew
Зачем ты это делаешь
при скачивании файлов часто приходит блок от сервера что бы заново не качать те же файлы удаляю ссылки на уже скачанные
Aragaer
не в курсе. Может быть на arrays есть, на list вообще непонятно как это можно было бы сделать
Andrew
Зачем ты это делаешь
возможно, что в бд много строк и он долго ищет? если я в функции сказал return print('Удалено из базы: ' + url) должен же возвращать print
Aragaer
что значит "возвращать print"?
UglyKoyote
я конечно не 7 пядей во лбу, но почему сразу там же и не печатать? ну что удалено
UglyKoyote
нафика return мучать?
Aragaer
он и печатает
Aragaer
а потом return-ом возвращает результат print
Aragaer
который вроде число символов распечатанных
Andrew
я конечно не 7 пядей во лбу, но почему сразу там же и не печатать? ну что удалено
проблема в том что если попытаться тут вывести if r.status_code in [200]: f = open('..') f.write(r.text) f.close() print('Ok') delete_string(url) если тут написать print('удалено из базы') time.sleep(2) то тоже не выводит
UglyKoyote
не в ифе.. а там где удаляешь
UglyKoyote
удалил/распечатал
Aragaer
значит путаю с другими языками
Tishka17
значит путаю с другими языками
write возвращает число символов. Принт - нет
Andrew
не в ифе.. а там где удаляешь
но я же в if делаю проверку, ответ от сервера 200 значит качаю файлы, после скачки, удалить из базы ссылку
Sergey
class Children(object): def __init__(self, username, last_name, apples): self.username = username self.last_name = last_name self.apples = apples children_list = [ Children('Вася', 'Пупкин', 5), Children('Петя', 'Пяточкин', 2), Children('Вася', 'Пупкин', 2), Children('Вася', 'Пяточкин', 1) ] # Вася Пупкин = 7 # Петя Пяточкин = 2 # Вася Пяточкин = 1 Есть какой-нибудь алгоритм сорттировки с провркой на условие, подходящий для этой задачи? Чтобы на выходе получить то что закоменчено. SQL конечно хорошо но не подойдет
Можно воспользоваться словарем для суммирования яблок: class Children(object): def __init__(self, username, last_name, apples): self.username = username self.last_name = last_name self.apples = apples def get_key(self): return f"{self.username} {self.last_name}" children_list = [ Children('Вася', 'Пупкин', 5), Children('Петя', 'Пяточкин', 2), Children('Вася', 'Пупкин', 2), Children('Вася', 'Пяточкин', 1) ] children_dict = {} for child in children_list: children_dict[child.get_key()] = children_dict.get(child.get_key(), 0) + child.apples print(children_dict) # {'Вася Пупкин': 7, 'Петя Пяточкин': 2, 'Вася Пяточкин': 1}
SetazeR
@Tishka17 Наконец заценил датаклассы
Tishka17
:)
SetazeR
и сделал сериализацию/десериализацию в json с них
SetazeR
вообще изи и удобно
Tishka17
А десериализацию как сделал?
SetazeR
так, я забыл что из этого в какую сторону
maxlunar
из в датакласс
SetazeR
спасиб
Gennady
Можно воспользоваться словарем для суммирования яблок: class Children(object): def __init__(self, username, last_name, apples): self.username = username self.last_name = last_name self.apples = apples def get_key(self): return f"{self.username} {self.last_name}" children_list = [ Children('Вася', 'Пупкин', 5), Children('Петя', 'Пяточкин', 2), Children('Вася', 'Пупкин', 2), Children('Вася', 'Пяточкин', 1) ] children_dict = {} for child in children_list: children_dict[child.get_key()] = children_dict.get(child.get_key(), 0) + child.apples print(children_dict) # {'Вася Пупкин': 7, 'Петя Пяточкин': 2, 'Вася Пяточкин': 1}
Пока сделал не красиво: # Вася Пупкин = 7 # Петя Пяточкин = 2 # Вася Пяточкин = 1 class Children(object): def __init__(self, username, last_name, apples): self.username = username self.last_name = last_name self.apples = apples children_list = [ Children('Вася', 'Пупкин', 5), Children('Петя', 'Пяточкин', 2), Children('Вася', 'Пупкин', 2), Children('Вася', 'Пяточкин', 1) ] for children in children_list: for children_clone in children_list: if children == children_clone: continue checks = [ children.username == children_clone.username, children.last_name == children_clone.last_name ] if all(checks): children.apples += children_clone.apples children_list.remove(children_clone) for children in children_list: print(children.__dict__) {'username': 'Вася', 'last_name': 'Пупкин', 'apples': 7} {'username': 'Петя', 'last_name': 'Пяточкин', 'apples': 2} {'username': 'Вася', 'last_name': 'Пяточкин', 'apples': 1}
SetazeR
А десериализацию как сделал?
описал структуру на принимающей стороне и потом просто написал MyDataclass(**dict)
maxlunar
У тебя определенная структура получается?
maxlunar
Или любой жсон
SetazeR
йеп
SetazeR
не любой
maxlunar
Понял.
SetazeR
жсон я генерю просто для промежуточного сохранения
Spirit
Доброе утро, господа. У меня тут вопрос по джанге и нжинксу. Я джангу поднял в докере, но статик файлы она не видит. Как я понял, нужно нжинксу их показать, верно? Только у меня нжинкс глобально стоит, вне контейнера докера. Можно ли отдавать статику с глобальным нжинксом?
maxlunar
ну наверное я бы сделал что-то вроде __setattr__(*x) for x in data.items()
SetazeR
Ну если говорить за конкретику: я открываю файл, читаю жсон - у меня в файле список экземпляров датакласса описанный моей же структурой
SetazeR
получаю данные, аппендю в список заюзав asdict из dataclasses и записываю этот список обратно в файл в жсон
Tishka17
ну наверное я бы сделал что-то вроде __setattr__(*x) for x in data.items()
Зачем так? И ты все равно объект не создашь без параметров инита
maxlunar
Зачем так? И ты все равно объект не создашь без параметров инита
А, я с ними даже и не работал. Пока не доводилось
SetazeR
@Tishka17 мне по большей части понравилось то что IDE мне поля которые я заполняю подсказывает
maxlunar
Но раз удобная штука попробую почитать материал
SetazeR
не надо ковыряться с ключами
SetazeR
ещё напишешь не тот символ