Самый эффективный способ проверить, является ли группа подгруппой другой группы, используя любую структуру данных на Python 3

Если я могу выбирать между списком объектов, списками целых чисел и словарями (есть ли другой вариант структуры данных?), какую структуру данных наиболее эффективно определить, является ли группа подгруппой другой группы, и как это сделать? воплощать в жизнь?

У меня есть класс с уникальными целочисленными атрибутами, поэтому я могу «представить» объект класса по целому числу, которое они содержат, или сам объект (указатель).

a.atributeEx = 1
b.atributeEx = 2
c.atributeEx = 3

listOfPointers = [a,b,c]
listAtributes = [1,2,3]
dictEx = ['1':1, '2':2, '3':3]

Один из вариантов - использовать issubset, как показано ниже:

listAtributes2 = [1,2]
set(listAtributes).issubset(listAtributes2)

Однако, используя функцию issubset со списком атрибутов, мой код мог бы работать от нескольких месяцев до нескольких лет, так как это должно выполняться миллиарды раз. Обычно в одном списке содержится от 1 до 4 элементов, а в другом - от 200 до 2000 элементов.

Как лучше всего подойти к этой проблеме?

4 голоса | спросил Rodrigo 23 Mayam18 2018, 05:35:59

2 ответа


0
Использование методов ---- +: = 0 =: + ---- должно быть достаточно эффективным.В частности, если вы делаете ---- +: = 1 =: + ---- , только размер ---- +: = 2 =: + ---- имеет значение, поскольку ---- +:= 3 =: + ---- использует хеширование, чтобы проверить, содержит ли он данный элемент.Хотя, если вы создаете экземпляр для каждого сравнения, вы добавляете большие издержки к своим вычислениям.Одним из решений является создание нового ---- +: = 4 =: + ---- в вашем методе ---- +: = 5 =: + ---- и заполнение его в вашем ---- +: = 6 =: + ---- метод.Чтобы разрешить удаление атрибутов, вы также можете определить метод ---- +: = 7 =: + ----, который удаляет элементы из ---- +: = 8 =: + ---- .Наконец, вы можете использовать метод ---- +: = 9 =: + ---- для выполнения сравнения подмножеств при использовании ключевого слова ---- +: = 10 =: + ---- .пример
ответил Olivier Melançon 23 Mayam18 2018, 05:50:58
0
Посмотрите на наборы питонов.Тип данных ---- +: = 0 =: + ---- содержит все необходимые операции (например, ---- +: = 1 =: + ---- ) и работает очень быстро.Если вы можете упростить свой код вызова и позволить наборам выполнять свою работу, вы увидите, что это хорошо работает.Я положил это в цикл.Он работал 100 000 000 раз за 27 секунд.Я думаю, что если вы предварительно вычислите свои наборы вместо того, чтобы строить их для каждого сравнения, вы обнаружите, что это очень эффективный способ обработки.https://docs.python.org/3/tutorial/datastructures.html#sets
ответил gahooa 23 Mayam18 2018, 05:39:47

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132