作者darkgerm (黑骏)
看板Python
标题Re: [问题] 排除输出重复数值的方法
时间Fri Nov 2 14:57:06 2012
※ 引述《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
1F:推 sofaly:非常谢谢 的确是跟我想要的一样 @@" 11/02 16:47