Aragaer
взятие минимума это верхний элемент в этом списке
Aragaer
а вот вставка соответственно смешнее. Очевидно, что выбрасывание старого это просто уменьшить "время жизни" у верхнего, если стало 0, то его выбросить и у нас новый верхний
Aragaer
а собственно вставка - и тут хитрость - если просто вставлять, идя сверху, то O(k)
Daniil
чет не получается придумтаь красивый код.
Смотрите. Есть списк туплов
Первый элемент тупла - данные, второй - путь в конечной структуре.
Например,
[
("hello", ("yyy",2,"a")),
("world",("xxx",))
]
Надо из этого списка сконструировать новую структуру. В данном случае:
{
"yyy": [
None,
None,
{"a": "hello"},
]
"xxx": "world"
}
Кто поможет?
а если в тупле будет больше элементов, то что будет? Например,
[
("hello", ("yyy",2,"a", "ttt", 6)),
("world",("xxx",))
]
{
"yyy": [
None,
None,
{"a": "hello"},
{"ttt": "hello"},
None,
]
"xxx": "world"
}
так?
Aragaer
а вот если идти с хвоста и сразу выбрасывать все, что больше (потому что все равно не доживет), то тут и есть "амортизированная константа"
Anonymous
а если в тупле будет больше элементов, то что будет? Например,
[
("hello", ("yyy",2,"a", "ttt", 6)),
("world",("xxx",))
]
{
"yyy": [
None,
None,
{"a": "hello"},
{"ttt": "hello"},
None,
]
"xxx": "world"
}
так?
как я понял будет больше None
Tishka17
а если в тупле будет больше элементов, то что будет? Например,
[
("hello", ("yyy",2,"a", "ttt", 6)),
("world",("xxx",))
]
{
"yyy": [
None,
None,
{"a": "hello"},
{"ttt": "hello"},
None,
]
"xxx": "world"
}
так?
Не. Там путь, а не количество в списке.
Anonymous
а последний будет “6”:“hello”
Aragaer
ну я б сделал функцию вида "create path", которая берет "элемент" и дает следующий
Tishka17
в твоем случае будет
{
"yyy": [
None, None, {
"a": {"ttt": [None, None, None, None, None, None, "hello"]}
}
]
"xxx": world,
}
Aragaer
но вот вопрос
Aragaer
[
("a", (1,))
("b", ("test",)
]
Aragaer
что получится?
Aragaer
или ты превратишь список в словарь для этого дела?
Tishka17
входной список может быть такой:
[
("a", (1, "x"),
("b", (1, "y")
]
Tishka17
Aragaer
не знаю про красиво, надо писать много кода 8)
Tishka17
вот да
Tishka17
и у меня не выходит красиво
Tishka17
хотя можно через defaultdict первым проходом, а потом сконвертить словари в списки
Tishka17
но чет медленно будет, чувсвую
Aragaer
придумал такое
Aragaer
сначала идем вперед, ищем сколько найдется
Aragaer
потом идем с конца до этого места, создаем структуры
Aragaer
потом вставляем результат
Aragaer
короче работающий код вроде сделал
Aragaer
https://gist.github.com/aragaer/3e6c015cc702cf7198bed4f1e54e462a
Aragaer
надо отрефакторить
ㅤ
Как использовать макросы типо этого
"{Привет|Здарова} Как {ты|сам} ?"
ㅤ
Aragaer
макросы?
Daniil
ㅤ
ㅤ
Anonymous
Aragaer
выглядит как rivescript
ㅤ
Daniil
так кто выбор делает что подставлять?
ㅤ
Daniil
рандомно?
ㅤ
Выбирает каждый раз
ㅤ
Tishka17
ㅤ
Kop
Tishka17
Дмитрий
Oleg
ㅤ
Tishka17
ну ты импортируй
Kop
Может что не так делал
Tishka17
Misha
Может что не так делал
In [4]: from collections import defaultdict
In [5]: defaultdict
Out[5]: collections.defaultdict
Kop
ㅤ
ㅤ
Там каждый раз разный текст
ㅤ
Ща покажу пример как это работает
Aragaer
регекспом выдрать блоки, для каждого блока сделать random.choice
Aragaer
или же переписать для rivescript и заюзать его
freezlite
У меня словарь из 100 элементов например, нужно пройтись циклом по 10, порядок не имеет значения
freezlite
как это сделать ?
Aragaer
сделать сначала список, а потом погуглить про "разбить лист на чанки"
Aragaer
есть готовые решения
deniallugo.eth
freezlite
.items()[:10] не работает
koder
for idx, key in enumerate(x):
If idx == 10:
break
freezlite
items() возвращает dict_items
Дмитрий
ㅤ
ㅤ
Больше не нашел видео
ㅤ
🤷♂ где макросы
Anonymous