保持自己的心态:不证明,不解释,不道歉,不纠结,不较真,不对抗,不强迫(强加自己的观点),不说教(评判一个人,误会别人);
做一个有情怀的人;一个人有没有用心去感受一些人一些事,然后跟这个事情有深度的链接
本章节关键:容器list的内容可以后面改变,地址并不改变;
list主要的问题是:索引的使用
所有的算法问题都是数学游戏;公式的写法不同而已
练习:打印杨辉三角:
#解法1:先凑,再确定边界;慢慢一步步解决问题;
n = int(input('>>>'))
tri = [[1],[1,1]] # 0,1
for i in range(2,n): #[0,5]
pre = tri[i-1] # 前面的2行
cur=[1]
#两种策略计算中间的值:1.先打印两边的1; 2.先用list给出两边的1,填充;
for j in range(i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
tri.append(cur)
print(tri)
---------------------------------------------------------------------
>>>5
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
#解法1优化:range(n) 循环n下 ,range(0),不仅如此循环,循坏0下;
n = int(input('>>>'))
tri = [[1]] # 0,1
for i in range(1,n): #[0,5]
pre = tri[i-1] # 前面的2行
cur=[1]
#两种策略计算中间的值:1.先打印两边的1; 2.先用list给出两边的1,填充;
for j in range(i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
tri.append(cur)
print(tri)
------------------------------------
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
#解法1优化2:容器的内容可以后面改变,地址并不改变;
list是不可变对象,添加到列表中之后,可以继续改变内嵌list,大列表中的小列表也会改变;
n = int(input('>>>'))
tri = [] #
for i in range(n): #[0,5]
cur=[1]
tri.append(cur)
if i == 0: continue
pre = tri[i-1]
for j in range(i-1): # range(0)不进去循环;
cur.append(pre[j]+pre[j+1])
cur.append(1)
print(tri)
-------------------------------------------------------
>>>6
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
# 解法2:补0法(两头补零,右边补零); 负索引的使用
效率低,增加了计算,copy的次数
n = int(input('>>>'))
tri = [[1]] # 0,1
for i in range(1,n): #[0,5]
pre = tri[i-1] + [0] # 前面的2行
cur=[]
#两种策略计算中间的值:1.先打印两边的1; 2.先用list给出两边的1,填充;
for j in range(i+1):
cur.append(pre[j-1] + pre[j]) # 负索引不影响;
tri.append(cur)
print(tri)
总结:
1.索引怎么算?一步一步算; 注意:负索引的使用;
2.效率不太高,两头的1都是加出来的,但思维方法值得学习;
3.变量名也要规范,从现在养成习惯;
4.清楚自己循环多少次的,建议用for循环;不知道多少次,用while;
网友评论