艾斯壓陣
1c950a7b02087bf4200394cdf1d3572c11dfcf23.jpg
一盞燈, 一片昏黃; 一簡書, 一杯淡茶。 守著那一份淡定, 品讀屬于自己的寂寞。 保持淡定, 才能欣賞到最美麗的風景! 保持淡定, 人生從此不再寂寞。
最近在學習Python,回顧了一些最初的經典函數和算法
楊輝三角定義如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
方法一
使用zip函數
如圖:
屏幕快照 2017-06-16 09.35.31.png
def triangles():
n = [1]
while True:
yield n
n = [x+y for x,y in zip([0] + n,n+[0])]
n = 0
for t in triangles():
print(t)
n = n + 1
if n == 10:
break
輸出結果:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
解析
n = [x+y for x,y in zip([0] + n,n+[0])]
當n=[1]時:
zip([0,1],[1,0])
通過
屏幕快照 2017-06-16 09.41.45.png
算出 n = [1,1]
以此類推
ps:zip()
1.定義:
zip([iterable, ...])
zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓)。
2.示例:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
print xyz
輸出結果:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
二維矩陣變換(矩陣的行列互換)
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print [ [row[col] for row in a] for col in range(len(a[0]))]
輸出結果
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
方法二
屏幕快照 2017-06-16 09.46.49.png
代碼:
def triangles():
L = [1] #定義L為一個只包含一個元素的列表
while True:
yield L #定義為生成器函數
L =[1] + [L[n] + L[n-1] for n in range(1,len(L))] + [1]
n = 0
for t in triangles():
print(t)
n = n + 1
if n == 10:
break
解析
輸出:
第一行:L = [1]
len(L) = 1
range(1,1) = [] #此時, L[n-1] for n in range(1,len(L))] 這個for in 不執行
第二行:L = [1] + [L[n] + L[n-1] for n in [] ] + [1]
L = [1] + [1]
L = [1, 1]
len(L) = 2
range(1,2) = [1]
第三行:L = [1] + [L[n] + L[n-1] for n in [1]] + [1]
L = [1] + [ L[1] + L[1-1] ] + [1]
L = [1] + [ L[1] + L[0] ] + [1]
L = [1] + [ 1 + 1] + [1]
L = [1, 2, 1]
以此類推