一隻太平洋睡鯊 发表于 2022-8-23 15:53:24

輸出4個不同物品數量可變的各種組合

本帖最后由 一隻太平洋睡鯊 于 2022-8-23 15:54 编辑

題目:
X=’abcd’ , 請輸出如下的各種組合 C14 , C24 ,C34,C44
{a},{b},{c},{d},{a,b},{a,c},{a,d},{b,c},{b,d},{c,d},{a,b,c},{a,b,d},{a,c,d},{b,c,d},{a,b,c,d}

我的答案(用迴圈):
listresult = []
X='abcd'
for i in X:
setemp = {i}
listresult.append(setemp)
for n in X:
for m in listresult:
    setemp = m.copy()
    setemp.update()
    if setemp not in listresult:
      listresult.append(setemp)
print(listresult)
輸出:
[{'a'},
{'b'},
{'c'},
{'d'},
{'a', 'b'},
{'a', 'c'},
{'a', 'd'},
{'b', 'c'},
{'b', 'd'},
{'a', 'b', 'c'},
{'a', 'b', 'd'},
{'c', 'd'},
{'a', 'c', 'd'},
{'b', 'c', 'd'},
{'a', 'b', 'c', 'd'}]

我的問題是,這個題目應該能用Recursion(遞迴/遞歸)達成?
我試了幾個思路,都不太對
希望有人能給個思路

qq1151985918 发表于 2022-8-23 17:50:45

def f(s):
    result =
    for i in s:
      x = s.replace(i,'',1)
      if x:
            result += f(x)
    return sorted(set(result), key=lambda x:)

一隻太平洋睡鯊 发表于 2022-8-24 09:16:55

本帖最后由 一隻太平洋睡鯊 于 2022-8-24 09:37 编辑

qq1151985918 发表于 2022-8-23 17:50


我拿去python tutor看,居然有404個step才跑完!
我看到step32就...不知道在幹嘛了{:10_266:}
不知道大神能不講解一下代碼的思路呢{:10_254:}

更新問題:
我又多看了幾次,感覺第一個問題點(因為看不懂這個就不知道後面的step在幹嘛了
是在step31從return sorted(set(result), key=lambda x:)這串代碼
跑出了一個的list
但到了step32,list變成['d'],然後成為了f('d')的return value

為時麼會從變成['d'],而不是回傳?
是因為return sorted(set(result), key=lambda x:)裡面的key嗎

qq1151985918 发表于 2022-8-24 10:53:58

一隻太平洋睡鯊 发表于 2022-8-24 09:16
我拿去python tutor看,居然有404個step才跑完!
我看到step32就...不知道在幹嘛了
不知道 ...

实话说,我不清楚你说的step是干啥的。我这就是递归求所有的子字符串,但是会有重复加了个去重加了个排序,递归的内容就是每次循环删除字符串的每一个字符,获取新的子串

一隻太平洋睡鯊 发表于 2022-8-24 11:32:28

qq1151985918 发表于 2022-8-24 10:53
实话说,我不清楚你说的step是干啥的。我这就是递归求所有的子字符串,但是会有重复加了个去重加了个排 ...

那是python tutor裡面的,visualize過程後的step{:10_282:}
页: [1]
查看完整版本: 輸出4個不同物品數量可變的各種組合