def divinding(a):
b=[]
c=[]
a.sort()
for i in a:
if(i%a[0])==0:
b.append(i)
else:
pass
if(len(b)>2):
store(b)
else:
pass
if(len(a)>1):
a.pop(0)
divinding(a)
def store(b):
c=[]
c.append(b)
print c
divinding([2, 11, 16, 12, 36, 60, 71, 17, 29, 144, 288, 129, 432, 993])
在此代码中单独获取所有值
[[2, 12, 16, 36, 60, 144, 288, 432]],[[12, 36, 60, 144, 288, 432]],[[16, 144, 288, 432]],[[36, 144, 288, 432]],[[144, 288, 432]]
但我需要一个列表中的所有值
[2, 12, 16, 36, 60, 144, 288, 432],[12, 36, 60, 144, 288, 432],[16, 144, 288, 432],[36, 144, 288, 432],[144, 288, 432]
像这样。
答案 0 :(得分:1)
根本不需要store
功能;所有它将b
包裹到c
然后打印c
。相反,我建议直接在b
[原文如此]中将c
添加到divinding
。使用append
添加b
和extend
,将递归调用返回的c
中的所有元素添加到dividing(a)
之后的a.pop(0)
。
def dividing(a):
c = []
a.sort()
b = [i for i in a if i % a[0] == 0]
if len(b) > 2:
c.append(b)
if len(a) > 1:
a.pop(0)
c.extend(dividing(a))
return c
结果现在不是由函数直接打印,而是返回:
>>> result = dividing([2, 11, 16, 12, 36, 60, 71, 17, 29, 144, 288, 129, 432, 993])
>>> print result
[[2, 12, 16, 36, 60, 144, 288, 432], [12, 36, 60, 144, 288, 432], [16, 144, 288, 432], [36, 144, 288, 432], [144, 288, 432]]
答案 1 :(得分:0)
定义' c'在商店功能之外,例如
c = []
def store(b):
c.append(b)
输出是:
c
Out[11]: [[2, 12, 16, 36, 60, 144, 288, 432],[12, 36, 60, 144, 288, 432],[16, 144, 288, 432],[36, 144, 288, 432],[144, 288, 432]]