题目内容来自网络 ,加入了个人理解的过程 ,和点评
#!/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,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'])
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
"""