#!/usr/bin/python
# -*- coding: UTF-8 -*-#Author : Wumi#題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
#程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。# 如果四個數字中有個零 ,難度就稍微增加了
num =[] # list
for 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,kprint k,j,i # reverse numnum.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 dataprint int(i+j)
"""
set(['1'])
11
set(['1', '2'])
12
set(['1', '3'])
13
set(['1', '2'])
21
set(['2'])
22
set(['3', '2'])
23
set(['1', '3'])
31
set(['3', '2'])
32
set(['3'])
33
"""