我正在编写一个函数,它应该输出列表 A 的所有 k 路分区。这个问题显然是递归的,实现应该很简单:
def gen_partition_k_group( A, k):
#
if len(A) == 0 :
# EDITED FOLLOWING SUGGESTION
yield [ [] for _ in xrange(k) ]
#
else :
# all k-partitions of the list of size N-1
for ss in gen_partition_k_group(A[:-1], k) :
assert( sum( len(gg) for gg in ss ) == len(A) -1 )
for ii in xrange(k) :
tt = list(ss)
print tt
tt[ ii ].append( A[ -1 ] )
print tt
assert( sum( len(gg) for gg in tt ) == len(A) )
yield tt
A = range(3)
k = 2
[ xx for xx in gen_partition_k_group( A, k) ]
输出
断言错误:
[[],[]]
[[0], [0]]
我不明白输出。它应该[[0], []]
代替[[0], [0]]
. 我错过了什么?
注意:我知道如何编写一个不同的函数,否则append
它会输出正确的结果。将所有分区迭代成k组?(第一个答案)
我不明白的是这个特定功能的行为。