[]除了定义list之外,大部分都是用于访问的,比如访问某个元素
{}用在不可重复的东西,比如字典或者集合
【组合数据类型】
列表 [ ]有序,可变
元组()有序 不可变 是列表的一种特殊
集合dict {} 也叫做字典
集合set 与字典类似,但是不存储value,是一组key的集合
【列表生成式】
谈及range() :百度上说它是可迭代对象,却不是迭代器。
自己试了一下,直接输出range(3),结果为range(0, 3)
说明range()并不是输出一个实质列表,只是一个对象!!(之前一直以为是生成一个列表)
【斐波那契数列】
【法一】其实就是简单的运用公式,先递归算出fn,再求余
n = int(input('请输入一个较大的整数n:'))
def Feb(n):
x = 1
y = 1
z = 2
for i in range(2,n+1):
z = x + y
x = y
y = z
return z
result = Feb(n) % 10007
print('')
print('输入的n为:',n)
print('运算结果为:',result)
【法二】能最好的解决内存占用问题,在n过大时,只在F中放置两个数
import time
start = time.time()
n = int(input())
F = [1, 1]
if n <= 2:
for item in range(n):
F.append(F[item] + F[item + 1])
print(F[n - 1]%10007)
else:
for item in range(n - 2):
result = F[0] + F[1]
F[0] = F[1]
F[1] = result
print(result%10007)
end = time.time()
print(end-start)
【法三】彻底解决时间和内存问题
关键思想:F(n)=F(n-1)+F(n-2),对F(n)求余,等于‘对F(n-1)求余加对F(n-2)求余’再求余
n = int(input())
F = [1, 1]
if n <= 2:
for item in range(n):
F.append(F[item] + F[item + 1])
print(F[n - 1]%10007)
else:
for item in range(n - 2):
result = (F[0] + F[1]) % 10007 # 计算出下一项后直接取余数,不影响结果
F[0], F[1] = F[1], result
print(result) # 直接输出余数,不需要再除10007
【函数】第一行可以用于注释,一定是字符串的形式,如:
def student_name(name):
"打印学生的名字"
【冒泡排序】
关键:
若要排列n个数,外层循环n-1次,每循环一次能冒泡出一个最大值,内层循环n-1-i,i为之前已经循环的次数,其实内层写n-1也可以,但是写n-1-i更严谨,能增加效率。如,排序20个数:
for i in range(20-1):
for j in range(20-1-i):
关键疑惑:【快速排序】假如调用的时候不传入三个参数怎么办???
【图像处理】
开始前引入依赖包
%matplotlib inline
import numpy as np
import cv2
import matplotlib.pyplot as plt
import paddle
from PIL import Image
使用opcv库时记得转换色彩通道
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
截取
img = cv2.imread('cat.png')
img[900:1000, 600:1000] 其中冒号两边表示截取的图像坐标范围
分离通道
方法一)读取时采用 img=Image.open(文件名)
分离用r,g,b=img.split()
方法二)读取时采用 img=cv2.imread(文件名)
分离用b,r,g=cv2.split(img)