Re: [問題] 排除輸出重複數值的方法

看板Python作者 (黑駿)時間11年前 (2012/11/02 14:57), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/6 (看更多)
※ 引述《sofaly (沙發椅)》之銘言: : 各位好 : 程式 8個變數 範圍由1~2 : 輸出 8個變數全部相加 = 9的結果 : x=3 : for a in range(1,x): : for b in range(1,x): : for c in range(1,x): : for d in range(1,x): : for e in range(1,x): : for f in range(1,x): : for g in range(1,x): : for h in range(1,x): : for i in range(1,x): : if a+b+c+d+e+f+g+h == 9: : print "%d %d %d %d %d %d %d %d " % : (a,b,c,d,e,f,g,h) 產生排列組合建意用遞回方式寫,而不是硬寫一推 for ex: x = 3 def DFS(data, deep): if deep==9: if sum(data)==9: print data return for i in range(1, x): DFS(data+[i], deep+1) if __name__ == '__main__': DFS([], 1) """output: [1, 1, 1, 1, 1, 1, 1, 2] [1, 1, 1, 1, 1, 1, 2, 1] [1, 1, 1, 1, 1, 2, 1, 1] [1, 1, 1, 1, 2, 1, 1, 1] [1, 1, 1, 2, 1, 1, 1, 1] [1, 1, 2, 1, 1, 1, 1, 1] [1, 2, 1, 1, 1, 1, 1, 1] [2, 1, 1, 1, 1, 1, 1, 1] """ 排列組合的話 Python 也有內建的函式可以用: import itertools x = 3 if __name__ == '__main__': for data in itertools.product(range(1,x), repeat=8): if sum(data) == 9: print data """output: (1, 1, 1, 1, 1, 1, 1, 2) (1, 1, 1, 1, 1, 1, 2, 1) (1, 1, 1, 1, 1, 2, 1, 1) (1, 1, 1, 1, 2, 1, 1, 1) (1, 1, 1, 2, 1, 1, 1, 1) (1, 1, 2, 1, 1, 1, 1, 1) (1, 2, 1, 1, 1, 1, 1, 1) (2, 1, 1, 1, 1, 1, 1, 1) """ 排除重複可以用利用 set 的特性,然後先做排序後再把重複的去掉 import itertools x = 4 ans = set() if __name__ == '__main__': for data in itertools.product(range(1,x), repeat=7): if sum(data) == 9: ans.add(tuple(sorted(data))) for i in ans: print i """output: (1, 1, 1, 1, 1, 1, 3) (1, 1, 1, 1, 1, 2, 2) """ 不知道這是不是你想要的?? -- 光明 的背後 是 黑暗 黑暗 的背後 還是 黑暗 由此可知 黑暗 > 光明 Q.E.D. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.230.123

11/02 16:47, , 1F
非常謝謝 的確是跟我想要的一樣 @@"
11/02 16:47, 1F
文章代碼(AID): #1Gasx5g1 (Python)
討論串 (同標題文章)
文章代碼(AID): #1Gasx5g1 (Python)