一、最近有点忙,欠的作业这就补上~
1、题目-----来源力扣
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
- 1 <= numRows <= 30
2、题解
杨辉三角对于学过数学的人应该很熟悉啦,就像图片中的演示,头尾都为1,掐头去尾后,某行的i等于上一行的i-1和i的和。用数学思维稍微思考一下,代码就差不多啦,可以用到我们上节课学的循环,因为一共有numRows行,这道题关键在于列表(数组的一种)的操作,稍后我们系统地讲一下。
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
result = list()#创建一个外层列表
for i in range(0,numRows,1):#第一层循环,外列表
sret = list()#创建一个内层列表
for j in range(0,i+1,1):#第二层循环,内列表
if j == 0 or j == i:
sret.append(1)
else:
sret.append(result[i - 1][j] + result[i - 1][j - 1])
result.append(sret)
return result
二、数组
1、定义
数组是编程中一种强大的数据结构,它允许存储和操作相同类型元素的集合。在 python 中,数组是通过数组模块创建的,该模块提供了一个简单的接口来创建、操作和处理数组。
2、类型
- list 普通的链表,是一种动态数组,初始化后可以通过特定方法动态增加元素。
定义方式:arr = [元素] - Tuple 固定的数组,一旦定义后,其元素个数是不能再改变的。
定义方式:arr = (元素) - Dictionary 词典类型, 即是Hash数组。字典内部是一个一对一映射的数据关系,就像英汉字典,每一个单词都会有对应的意思,比例为1对1。
定义方式:arr = {元素k:v}
ps:列表和数组的区别
- 列表可以包含各种数据类型的存储项目,也就是可以同时包含整数、浮点数、字符串等其他数据类型,数组并非如此,数组存储的是相同单一类型的项目。
- 列表有内置,数组调用Numpy库。
3、数组的使用方法
List
- 定义与创建
- 定义有初始化 exam1 = [1,2,[1,2,3]];exam2 = [i for i in range(1,6)]
- 创建一个简单列表 exam5 = list('apple')
- 创建一个空列表 exam4 = list()
- 定义无初始化 exam3 = []
2.列表的访问
- 列表名[下标]
- 列表名[开始:结束:步长]
3.列表元素添加、修改与删除
- listname.append('value')、listname.extend()、listname.insert()
- listname[index] = new value
- del listname[index]、listname.pop(index)、listname.remove(value)
4.切片
- 格式:序列名[start : end : step],start表示想要访问的值的起始位置索引(包含该位置);end表示切片的结束位置索引(不包含该位置),不指定则默认为序列长度;step表示切片步长,不指定则默认步长为1,第二个冒号可省略。
- 序列相加:实现两个序列相连接,不去除重复元素
- 序列相乘:n*序列,表示将n个序列相加
list1 = ['Lumos']
list2 = ['带你学python']
list3 = list1 + list2
print(list3)
#输出:['Lumos', '带你学python']
print(10 * list3)
#输出:['Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python', 'Lumos', '带你学python']
- 其他内置函数
len():计算序列的长度,即返回序列中元素的个数
max():返回序列中元素的最大值
min():返回序列中元素的最小值
sum():计算序列中元素的和,使用该函数时,序列中元素必须都是数字,不能是字符或字符串,否则会报错。因为Python解释器无法判断‘+’是要做求和运算还是序列连接操作
list():将序列转化为列表
str():将序列转化为字符串
tuple:将序列转化为元组
sorted:对序列中元素进行排序
reversed():将序列中的元素反向,不会改变原序列顺序,而是指向一个新的地址,如原序列list1,可通过q = list(reversed(list1)),得到一个元素顺序与原序列list1相反的新序列q
enumerate():将序列索引和序列元素组合成元组,形成一个新序列
采用第三方库操作数组
1.创建数组
import numpy as np
arr = np.array([1, 2, 3, 4, 5]) # 创建一维数组
print(arr) # 输出: [1 2 3 4 5]
matrix = np.array([[1, 2, 3], [4, 5, 6]]) # 创建二维数组
print(matrix)
# 输出:
# [[1 2 3]
# [4 5 6]]
2.访问和修改数组元素
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr[0]) # 输出: 1,访问第一个元素
arr[2] = 10 # 修改第三个元素为10
print(arr) # 输出: [ 1 2 10 4 5]
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix[0, 1]) # 输出: 2,访问第一行第二列元素
matrix[1, 2] = 7 # 修改第二行第三列元素为7
print(matrix)
# 输出:
# [[1 2 3]
# [4 5 7]]
Tuple
4.创建与使用
tup1 = ('apple','pear',2000,2024,2000)
tup2 = (1,2,3,4,5)
tup3 = "a","b","c","d"
print(tup1[1:5])#访问输出('pear', 2000, 2024)
#不可以修改,只能增加;
tup3 = tup1 + tup2
print(tup3)
tup1.count(2000)# 查找元素在tuple中出现的次数
tup1.index(2000)#查找元素的第一个索引值
5.内置函数
- cmp(tuple1, tuple2):比较两个元组元素
- len(tuple):计算元组元素个数
- max(tuple):返回元组中元素最大值
- min(tuple):返回元组中元素最小值
- tuple(seq):将列表转换为元组。
Dictionary
1.字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
2.创建与访问
#创建字典三个例子
test = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
test1 = { 'abc': 456 }
test2 = { 'abc': 123, 98.6: 37 }
print(test,test1,test2)
#输出
#{'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} {'abc': 456} {'abc': 123, 98.6: 37}
#访问字典里的值
print(test['Beth'])
#输出:9102
3.修改与删除
#修改字典中的值
test['Beth'] = 2024
print(test['Beth'])
#输出:2024
del test2['abc']
print(test2)
#输出{98.6: 37}
test2.clear() # 清空字典所有条目
print(test2)
del test # 删除字典
4.内置函数
- cmp(dict1, dict2):比较两个字典元素
- len(dict):计算字典元素个数,即键的总数
- str(dict):输出字典可打印的字符串表示
- type(variable):返回输入的变量类型,如果变量是字典就返回字典类型。
- dict.clear():删除字典内所有元素
- dict.copy():返回一个字典的浅复制
- dict.fromkeys(seq[, val]):创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
- dict.get(key, default=None):返回指定键的值,如果值不在字典中返回default值
- dict.has_key(key):如果键在字典dict里返回true,否则返回false。Python3 不支持
- dict.items():以列表返回可遍历的(键, 值) 元组数组
- dict.keys():以列表返回一个字典所有的键
- dict.setdefault(key, default=None):和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
- dict.update(dict2):把字典dict2的键/值对更新到dict里
- dict.values():以列表返回字典中的所有值
- pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
- popitem():返回并删除字典中的最后一对键和值
三、最后总要说点啥
这篇文章几乎拖了两周,我每天都会用空余时间查关于数组的资料,像钻牛角尖似的,立志生成一篇最全的python数组教程,可是我翻阅了很多文章,都难以整合一篇最完整、逻辑最缜密的文章,突然在今晚又想到,这一切重要吗?学会就OK了,为什么要纠结这个形式呢,那我不就成为自己最讨厌的那种人了,所以说知识不要停留在表面,要真的学会并举一反三,共勉,各位。