自學python3中,現在開始每天在python2.71 100例中做一道題,用python3實現,並寫下一些思考~加油(ง •̀灬•́)ง
題目網站(http://www.runoob.com/python/python-100-examples.html)
001題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
我的答案:
def fun(): n=0 for x in range(1,5): for y in range(1,5): for z in range(1,5): if (x!=y) and (x!=z) and (y!=z): print("%d%d%d"%(x,y,z)) n=n+1 print("tatal:%d"%n)
fun()
思考:
1.用三個循環嵌套可以遍歷所有可能的數值,再用if條件篩選出來。但是在數據量大的時候遍歷,可能會延長時間。所以可以改進一下代碼:
def fun(): n=0 for x in range(1,5): for y in range(1,5) : if y!=x: #增加if條件語句,讓循環要產生的數字減少,更省運行時間 for z in range(1,5): if (x!=z) and (y!=z): print("%d%d%d"%(x,y,z)) n=n+1 print("tatal%d"%n) fun()
2.用permutations的方法
from itertools import permutations for i in permutations([1,2,3,4],3): print("%d%d%d" %(i[0],i[1],i[2]))
itertools.permutations(iterable,r)
創建了一個迭代器,返回iterable中所有長度為r的項目序列,如果省略了r,那么序列的長度與iterable中的項目數量相同: 返回p中任意取r個元素做排列的元組的迭代器。
等於說是從列表[1,2,3,4]任意取三個元素,各種排列后,返回含有三個元素的tuple。最后輸出的時候格式化一下就好了~
