여기이 웹 사이트에서 The Python Yield Keyword Explained을 통해 읽었으며 일부 기능에서는 약간 놀았지만 내 인생에서이 문제를 해결하지 못했습니다. 문제. 생성기가 빈 목록을 잘못 생성했습니다
import collections
import itertools
import pprint
import copy
partition = []
def partition_prime_factors(partition_structure, prime_factors):
# partition_structure is a list
# prime_factors is a collections.Counter object
global partition
for subsection_size in reversed(partition_structure):
partition_structure.remove(subsection_size)
subsections = list(itertools.combinations(prime_factors.elements(), subsection_size))
for subsection in subsections:
prime_factors -= collections.Counter(subsection)
partition.append(list(subsection))
if len(prime_factors) == 0:
pprint.pprint(globals()['partition'])
yield copy.copy(partition)
else:
for j in partition_prime_factors(partition_structure, prime_factors):
pass
prime_factors += collections.Counter(subsection)
partition.remove(list(subsection))
partition_structure.append(subsection_size)
print [i for i in partition_prime_factors([1, 3], collections.Counter([2, 2, 3, 5]))]
>>> [[2, 2, 3], [5]]
>>> [[2, 2, 5], [3]]
>>> [[2, 3, 5], [2]]
>>> [[2, 3, 5], [2]]
>>> [[2], [2, 3, 5]]
>>> [[2], [2, 3, 5]]
>>> [[3], [2, 2, 5]]
>>> [[5], [2, 2, 3]]
>>> []
그래서 파티션 올바르게 평가하지만 수득되지되고 :
는 I 값이 예에 공급 된 다음 생성 기능을 갖는다. 방법!?!?!?! 웃음! 나는 심지어 같은 객체를 참조함으로써 망쳐 놓는 것을 피하기 위해 양보하기 전에 각 파티션의 사본을 만듭니다.
당신이 어떻게 항복 키워드 ** **에 대해 언급하는 웹 사이트 :
당신이 값을 다시 산출해야합니까? 링크를 제공하십시오. – arulmr
@arulmr oops. 질문의 이름이 잘못되었습니다. 나는 URL에 지금 고마워했다. – nebffa