Re: [問題] 排除輸出重複數值的方法
※ 引述《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
討論串 (同標題文章)