Мне нужно написать генератор, который возвращает каждое расположение предметов таким образом, чтобы каждый находился в одной или ни одной из двух разных сумок. Каждая комбинация должна быть представлена как кортеж из двух списков, первый из которых - это элементы в bag1, а второй - элементы в bag2.
Я написал следующий код, и он не прошел один тестовый пример. Он говорит, что моя реализация имеет больше договоренностей, чем в правильном ответе. Второй контрольный пример проходит. Я не вижу, какие элементы используются в тестовых примерах, но я пробовал некоторые значения, и это, похоже, работает. Может кто-нибудь объяснить мне, что не так?
Что я в основном делаю, так это удаление первого элемента в массиве и рекурсивный вызов функции с остальными. Затем я даю все возможные аранжировки с ранее удаленным предметом (не добавляя его, добавляя его только в первый пакет, добавляя его только во второй пакет) для каждого аранжировки, возвращаемого рекурсией.
def yieldAllCombos(items):
"""
Generates all combinations of N items into two bags, whereby each
item is in one or zero bags.
Yields a tuple, (bag1, bag2), where each bag is represented as a list
of which item(s) are in each bag.
"""
# Your code here
if (items == []):
yield ([], [])
else:
item = items[0]
for result in yieldAllCombos(items[1:]):
yield (result[0], result[1])
yield (result[0] + [item], result[1])
yield (result[0], result[1] + [item])