WedX - журнал о программировании и компьютерных науках

Как сравнить значения с одинаковой позицией индекса между подсписками в списке?

Для визуальной простоты я вставлю код, который считаю актуальным, если нужно что-то еще, пожалуйста, оставьте комментарий.

Допустим, у нас есть следующий словарь под названием «состояния»:

{0: ([[0, 0], [0, 0]], [1, 0]), 1: ([[0, 0], [0, 1]], [1, 0]), 2: ([[0, 0], [1, 0]], [1, 0]), 3: ([[0, 0], [1, 1]], [1, 0]), 4: ([[0, 1], [0, 0]], [1, 0]), 5: ([[0, 1], [0, 1]], [1, 0]), 6: ([[0, 1], [1, 0]], [1, 0]), 7: ([[0, 1], [1, 1]], [1, 0]), 8: ([[1, 0], [0, 0]], [1, 0]), 9: ([[1, 0], [0, 1]], [1, 0]), 10: ([[1, 0], [1, 0]], [1, 0]), 11: ([[1, 0], [1, 1]], [1, 0]), 12: ([[1, 1], [0, 0]], [1, 0]), 13: ([[1, 1], [0, 1]], [1, 0]), 14: ([[1, 1], [1, 0]], [1, 0]), 15: ([[1, 1], [1, 1]], [1, 0]), 16: ([[0, 0], [0, 0]], [0, 1]), 17: ([[0, 0], [0, 1]], [0, 1]), 18: ([[0, 0], [1, 0]], [0, 1]), 19: ([[0, 0], [1, 1]], [0, 1]), 20: ([[0, 1], [0, 0]], [0, 1]), 21: ([[0, 1], [0, 1]], [0, 1]), 22: ([[0, 1], [1, 0]], [0, 1]), 23: ([[0, 1], [1, 1]], [0, 1]), 24: ([[1, 0], [0, 0]], [0, 1]), 25: ([[1, 0], [0, 1]], [0, 1]), 26: ([[1, 0], [1, 0]], [0, 1]), 27: ([[1, 0], [1, 1]], [0, 1]), 28: ([[1, 1], [0, 0]], [0, 1]), 29: ([[1, 1], [0, 1]], [0, 1]), 30: ([[1, 1], [1, 0]], [0, 1]), 31: ([[1, 1], [1, 1]], [0, 1]), 32: ([[0, 0], [0, 1]], [-1, 0]), 33: ([[0, 0], [1, 0]], [-1, 0]), 34: ([[0, 0], [1, 1]], [-1, 0]), 35: ([[0, 1], [0, 0]], [-1, 0]), 36: ([[0, 1], [0, 1]], [-1, 0]), 37: ([[0, 1], [1, 0]], [-1, 0]), 38: ([[0, 1], [1, 1]], [-1, 0]), 39: ([[1, 0], [0, 0]], [-1, 0]), 40: ([[1, 0], [0, 1]], [-1, 0]), 41: ([[1, 0], [1, 0]], [-1, 0]), 42: ([[1, 0], [1, 1]], [-1, 0]), 43: ([[1, 1], [0, 0]], [-1, 0]), 44: ([[1, 1], [0, 1]], [-1, 0]), 45: ([[1, 1], [1, 0]], [-1, 0]), 46: ([[1, 1], [1, 1]], [-1, 0]), 47: ([[0, 0], [0, 1]], [0, -1]), 48: ([[0, 0], [1, 0]], [0, -1]), 49: ([[0, 0], [1, 1]], [0, -1]), 50: ([[0, 1], [0, 0]], [0, -1]), 51: ([[0, 1], [0, 1]], [0, -1]), 52: ([[0, 1], [1, 0]], [0, -1]), 53: ([[0, 1], [1, 1]], [0, -1]), 54: ([[1, 0], [0, 0]], [0, -1]), 55: ([[1, 0], [0, 1]], [0, -1]), 56: ([[1, 0], [1, 0]], [0, -1]), 57: ([[1, 0], [1, 1]], [0, -1]), 58: ([[1, 1], [0, 0]], [0, -1]), 59: ([[1, 1], [0, 1]], [0, -1]), 60: ([[1, 1], [1, 0]], [0, -1]), 61: ([[1, 1], [1, 1]], [0, -1])}

«состояния» зависят от трех переменных: (Примечание: значения следующих переменных генерируют приведенный выше словарь)

NUM_MECS = 2
MAX_MEC_CAPACITY = 2
VNF_TYPES = 2

Выберем значение из ключа 1:

([[0, 0], [0, 1]], [1, 0])

«NUM_MECS» определяет количество подсписков, которое будет иметь первый элемент кортежа (значение из ключа 1). Поскольку его значение равно 2, у нас есть два подсписка: [[0, 0], [0, 1]].

«MAX_MEC_CAPACITY» определяет диапазон для каждого значения в подсписках для первого элемента в кортеже. То есть любое из значений из [[0, 0], [0, 1]] может варьироваться от 0 до 1. Если мы изменим значение на 3, это будет означать, что каждое значение находится в диапазоне от 0 до 2 (например, [[2, 0], [1, 2]]).

'VNF_TYPES' будет определять размер для всех подсписков, а также для второго элемента в кортеже. Поскольку его значение равно 2, у нас есть только размер 2 во всех подсписках и списке из второго элемента в кортеже ([[размер 2], [размер 2]], [размер 2]).

Второй элемент кортежа, список, может содержать только два значения (1 или -1), и только один из его элементов может содержать его, в то время как остальные останутся со значением 0. Независимо от размера списка, только один из его элементов будет содержать либо 1, либо -1. где бы ни был 1 или -1, будет определять, в какой позиции из элементов подсписков будет затронут первый элемент в кортеже. Следовательно, если у нас есть:

 ([[0, 0], [0, 1]], [1, 0])

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

Здесь:

 ([[1, 0], [0, 1]], [1, 0])

или здесь:

 ([[0, 0], [1, 1]], [1, 0])

Аналогично, если у нас есть:

([[0, 1], [1, 1]], [-1, 0])

Означает, что мы можем вычесть единицу из любого из первых элементов подсписков, в данном конкретном случае будет вычитаться только из второго подсписка:

([[0, 1], [0, 1]], [-1, 0])

Как мы назначаем, к какому подсписку добавлять или вычитать не имеет отношения.

Давайте сосредоточимся только на тех значениях, где второй элемент кортежа будет содержать -1. Следуя ранее объясненным рекомендациям, мы можем согласиться с тем, что нет никакого смысла иметь значение, из которого мы ничего не можем вычесть, например:

([[0, 0], [0, 0]], [-1, 0])

Поэтому мы могли бы реализовать следующее, чтобы избавиться от всех возможных вариаций из последнего примера:

for key, state in states.values():
    if ([[0]*VNF_TYPES]*NUM_MECS == state[0]) and (-1 in s[1]):
        del states[key]

Это позволяет удалить только:

([[0, 0], [0, 0]], [-1, 0])

or

([[0, 0], [0, 0]], [0, -1])

ПОСТАНОВКА ЗАДАЧИ

Хотя приведенные выше значения были удалены из словаря, все еще есть некоторые значения, которые все еще не имеют смысла, поэтому я хочу их удалить, например:

([[0, 0], [0, 1]], [-1, 0]),
([[0, 0], [1, 0]], [0, -1]),
([[0, 1], [0, 0]], [-1, 0]),
([[1, 0], [0, 0]], [0, -1]),
([[0, 1], [0, 1]], [-1, 0]),
([[1, 0], [1, 0]], [0, -1]),
([[0, 1], [0, 1]], [-1, 0]),

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

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

26.02.2021

Ответы:


1

Эта функция будет определять, является ли кортеж действительным или нет.

def is_valid_tuple(aTuple):
    try: 
        ind = aTuple[1].index(-1) 
    except ValueError: # There is no -1 
        return True 
    for ls in aTuple[0]: # for all sublists 
        if ls[ind] != 0: # if any are not zero, we are fine to exit 
            return True 
    return False 

Для всех ваших тестовых случаев он вернет False.

26.02.2021
  • В точку!!!, спасибо за помощь. Возможно, вы захотите исправить «tup[0]» на «aTuple[0]». 26.02.2021
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]