Самый быстрый способ запустить алгоритм на нескольких аргументах, запустив его в прошлом, после изменения одной переменной - PullRequest
0 голосов
/ 03 июля 2018

Лучший способ объяснить мой вопрос - следующий пример. Обратите внимание, что «условное возвращение True» на самом деле является ответом асинхронной веб-сокета.

Скажем, во время выполнения цикла while True существует переменная x, назначенная списку из 15 диктов, каждый из которых имеет 5 пар ключ / значение, причем каждая пара выбирается случайным образом из дикта y из 26 пар ключ / значение, где каждая клавиша является буквой алфавита. Известно, что ни одно из значений диктов в x не составляет> 50.

Скажем, какое-то условие в цикле while True становится истинным, и значение для ключа a в y теперь равно 30. Помимо грубого форсирования, есть ли более быстрый способ проверить, являются ли значения любого диктанта в x теперь сумма до> 50, с учетом изменения на a?

Примечание. Я ищу решение, которое применяется ко всем ключам в y, а не только к a.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Я полагаю, что «имеется переменная x, назначенная списку из 15 диктов, каждый из которых имеет 5 пар ключ / значение», вы подразумеваете «существует список из 15 диктов, каждый из которых имеет 5 пар ключ / значение, присваивается переменной x ".

Если значения ключа / значений многократно изменяются, а ключи для каждого dict остаются неизменными, то, возможно, самый простой способ - отслеживать сумму каждого dict и изменять их при изменении значения , И, вероятно, быстрее «транспонировать», так сказать, дикты, чтобы вместо того, чтобы для каждого дикта видеть, в каких ключах он у вас есть, для каждого ключа вы сохраняете то, в чем он состоит. Например:

inclusions = {key: 
    [index for index in range(len(x)) if key in x[index].keys()]
    for key in y.keys()}
#inclusions is a dictionary is which each key is a key from y
#and each value is a list of dictionaries in x
#that contain that key

sums = [sum(x[i].values() for i in range(len(x)))]
#sums is a list of sums of the corresponding dicts in x
#i.e. the nth value of sums is the sum of the values in x[n]

while True:
    # y[a] changes from old_value to new_value
    diff = new_value-old_value
    for index in inclusions[a]:
        sums[index] += diff
    #you can now test for >50
    #e.g. any([value > 50 for value in sums])
0 голосов
/ 03 июля 2018

Вы можете хранить, сколько "места" осталось у каждого диктанта.

Скажите dict1 суммы 42, вы бы хранили 8.

Теперь, каждый раз, когда вы меняете какое-то значение в y, вам нужно знать, насколько вы изменились. Если бы значение было 10, а сейчас 22, вы бы увидели, что 12 больше 8, другими словами, dict1 суммирует больше, чем 50 ...

Не забудьте обновить, сколько еще осталось каждого диктанта! Если вы изменили 10 на 12, вы заметите, что 2 меньше 8, что означает, что dict1 по-прежнему суммирует меньше 50 после изменения в y, но знайте, что оно имеет только 6 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...