170 похожих чатов

Есть лист [15, 20, 30] каждый его элемент нужно сложить

друг с другом и записать в словарь. {15: {20:35, 30:45}, 20: {15:35, 30:50}} Я могу это сделать циклом for, но в таком случае мы дважды будем считать каждое значение. 15+20 = 20+15 это нужно избежать. Вопрос как?

19 ответов

14 просмотров

Вообще довольно легко def func(s: list): result = {} for i in range(len(s) - 1): tmp = {} for j in range(i + 1, len(s)): tmp [s[j]] = s[j] + s[i] result[s[i]] = tmp return result

NoName- Автор вопроса
Артур Шадараев
Вообще довольно легко def func(s: list): resul...

Тогда последнего элемента не будет )

NoName
Тогда последнего элемента не будет )

Так ты вроде так и написал. У тебя входной лист [15, 20, 30] , а результат {15: {20:35, 30:45}, 20: {15:35, 30:50}}

NoName
Тогда последнего элемента не будет )

У тебя ж последний элемент и так со всеми уже сложен

NoName- Автор вопроса
Артур Шадараев
Так ты вроде так и написал. У тебя входной лист [...

{15: {20:35, 30:45}, 20: {15:35, 30:50}, N...} надо как-то так ) мы не знаем сколько значений войдет. Я думаю через 2 фора и в словари сразу записывать. Но пока не тестил.

NoName- Автор вопроса
Ruslan
У тебя ж последний элемент и так со всеми уже слож...

Словари должны быть полными, со всеми результатами друг друга

NoName
Словари должны быть полными, со всеми результатами...

Какой словарь должен быть для последнего элемента?

NoName
{15: {20:35, 30:45}, 20: {15:35, 30:50}, N...} над...

Так ты напиши себе пару тестов и проверь что код выдаст

NoName- Автор вопроса
Артур Шадараев
Какой словарь должен быть для последнего элемента?

dictor = { '10': { {'20': 30}, {'30': 40} }, '20': { {'10': 30}, {'30': 50} }, '30': { {'10': 40}, {'20': 50} }, }

NoName
dictor = { '10': { {'20': 30}, ...

Ну вроде тоже легко def func(s: list): result = {} for i in range(len(s)): tmp = {} for j in range(len(s)): if j != i: tmp [s[j]] = s[j] + s[i] result[s[i]] = tmp return result

NoName- Автор вопроса
Артур Шадараев
Ну вроде тоже легко def func(s: list): result ...

спасибо, страшно выглядит. Пойду разбираться ))

NoName
спасибо, страшно выглядит. Пойду разбираться ))

Упростить можно с помощью генераторов

NoName- Автор вопроса
Артур Шадараев
Ну вроде тоже легко def func(s: list): result ...

Вывод правильный, но время работы такое-же. Так что написал тоже самое что и я ток по страшнее ) dictor = { '10': {}, '20': {}, '30': {}, } def calc(x, y): time.sleep(2) return int(x) + int(y) def func(arr): for x in arr: for i in arr: if x == i: continue dictor[x][i] = {i : calc(x, i)} arr = [x for x in dictor.keys()] func(arr) Что твоя функция, что моя работает 12секунд. А должна 6 так как мы можем посчитать только 10+20 10+30 20+30 что бы найти все результаты.

NoName
Вывод правильный, но время работы такое-же. Так чт...

Так тебе типа надо не считать второй раз, но записать в словарь?

NoName- Автор вопроса
Ruslan
Так тебе типа надо не считать второй раз, но запис...

да, нужно сократить время по максимуму.

NoName
Вывод правильный, но время работы такое-же. Так чт...

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

NoName- Автор вопроса
Артур Шадараев
Сомневаюсь, что проблема в подсчете чисел. Я думаю...

Мы просто всё еще считаем всё столько раз, сколько у нас элементов.

NoName- Автор вопроса
Артур Шадараев
Сомневаюсь, что проблема в подсчете чисел. Я думаю...

import time from datetime import datetime start_time = datetime.now() dictor = { '10': {}, '20': {}, '30': {}, } def calc(x, y): time.sleep(2) return int(x) + int(y) def func(arr): for x in arr: for i in arr: if x == i: continue if i not in dictor[x].keys() and x not in dictor[i].keys(): res = calc(x, i) dictor[x][i] = res # {i : res} dictor[i][x] = res # {x : res} arr = [x for x in dictor.keys()] func(arr) print(dictor) print(datetime.now() - start_time) 6 секунд.

NoName
import time from datetime import datetime start_t...

меньше проходов получается

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта