題目內容來自網路 ,加入了個人理解的過程 ,和點評
#!/usr/bin/python# -*- coding: UTF-8 -*-#Author : Wumi#題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重複數位三位元。各是多少。#程式分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。# 如果四個數字中有個零 ,難度就稍微增加了num =[] # listfor i in range(1,5): # range 的高位是不包括在內的 for j in range(1,5): for k in range(1,5): if i!=j and i != k and j!=k : print i,j,k print k,j,i # reverse num num.append([i,j,k])print "how many num we have of the permutation and combination :",len(num) # 24# big tall up#將for迴圈和if語句綜合成一句,直接列印出結果lists =[ (i*100+10*j+k) for i in range(1,5) for j in range(1,5) for k in range(1,5) if ( i!=j and i !=k and j!=k )]print len(lists)print len(lists),":",lists# use set function to remove the duplicate numbers ,set 是沒有重複資料的# one important tips is that the alphabet can uses join function +alphabetList = ['1','2','3','4']numberList = [ int(i+j+k) for i in alphabetList for j in alphabetList for k in alphabetList if (len(set(i+j+k)) ==3)]print numberList ,":",len(numberList)# question is why i != k and != j ? 也就是為什麼沒有重複位 。。 譬如 111 or 122 等# here is the core reason ::lists =['1','2','3']for i in lists: for j in lists: print set(i+j) # add memeber into set using plus + ---> set(['1', '2']) ,no replicate data print int(i+j)"""set(['1'])11set(['1', '2'])12set(['1', '3'])13set(['1', '2'])21set(['2'])22set(['3', '2'])23set(['1', '3'])31set(['3', '2'])32set(['3'])33"""