Не уверен, что пример (или фактический сценарий использования) квалифицируется как NP-Complete, но я задаюсь вопросом о самом Pythonic способе сделать следующее, предполагая, что это был алгоритм.
Скажем, у вас есть:
class Person:
def __init__(self):
self.status='unknown'
def set(self,value):
if value:
self.status='happy'
else :
self.status='sad'
... blah . Maybe it's got their names or where they live or whatev.
и некоторые операции, требующие группы лиц. (Ключевое значение здесь - человек счастлив или грустен.)
Следовательно, учитывая PersonA, PersonB, PersonC, PersonD - я бы хотел закончить список возможных 2 ** 4 комбинаций грустных и счастливых людей. т.е. * +1008 *
[
[ PersonA.set(true), PersonB.set(true), PersonC.set(true), PersonD.set(true)],
[ PersonA.set(true), PersonB.set(true), PersonC.set(true), PersonD.set(false)],
[ PersonA.set(true), PersonB.set(true), PersonC.set(false), PersonD.set(true)],
[ PersonA.set(true), PersonB.set(true), PersonC.set(false), PersonD.set(false)],
etc..
Есть ли хороший Pythonic способ сделать это? Я думал о списочном понимании (и об изменении объекта, чтобы вы могли вызвать его и получить два возвращенных объекта, true и false), но форматы понимания, которые я видел, потребовали бы от меня заранее знать количество людей. Я хотел бы сделать это независимо от количества человек.
РЕДАКТИРОВАТЬ: Предположим, что независимо от того, что операция, которую я собирался запустить, является частью большого набора проблем - нам нужно проверить все значения Person для данного набора, чтобы решить нашу проблему. (то есть я знаю, что сейчас это не выглядит NP-завершенным =))
есть идеи?
Спасибо!