python_一些基础知识 字符串 链表 时间复杂度

定义函数时不确定定义多少个参数,在参数名称前添加*号,表示这个位置的参数可以是多个。
Example:

1
2
3
4
5
def result(grade,*age):
print('年级:',grade)
print('年龄:',*age)

result(6,7,8,9)

结果为:
年级:6
年龄:7,8,9

直接打印age:

1
2
3
4
5
6
def result(grade,*age):
print('年级:',grade)
print('年龄:',*age)
print(age)

result(6,7,8,9)

结果为:
年级: 6
年龄: 7 8 9
(7, 8, 9)
age被转换为了元组。

总结
函数中的参数如果前面加,这个参数可以接收多个,并最后都转化为元组。
如果在参数前面加两个
,会将参数转化为字典。调用时要用key-value形式。即:

1
2
3
4
5
def result(grade,**age):
print('年级:',grade)
print('年龄:',age)

result(grade=6, age1=7, age2=8, age3=9)

结果为:
年级: 6
年龄: {‘age1’: 7, ‘age2’: 8, ‘age3’: 9}


字符串

Python中,string是不可变类型的。

常用转义字符

单引号:'
双引号:'‘
换行:n
tab:t
回车:r
退格:b
如果需要显示字符n,不想换行,在
前面加r:r'我不换行n我没换行'

字符串拼接

用+号:str = str1+str2
用+=性能更好:str1 += str2
生成相同的字符串:str1 = ‘a’; print(str13) 结果:aaa

字符串格式化

%s:字符格式化
%d:整型格式化
eg.print(‘我叫%s,今年%d岁’ % (‘Cliare’,20))
还有一种format方法,使用{}来占位:
print(‘我叫{0},今年{1}岁’.format(‘Claire’,20))

print(‘我叫{name},今年{age}岁’.format(name=’Claire’,age=20))

字符串常用函数

查找

eg. strl = ‘今天天气很好!’
strl.find(‘今天’) #返回“今”的索引

替换

eg. strl = ‘今天天气很好!’
strl.replace(‘今天’,’昨天’)

分割

eg. strl = ‘2019-9-22 12:50:33’
strl.split(‘ ‘) #用空格分割
strl.split(‘ ‘)[0].split(‘-‘) #对日期用-分割
strl.split(‘ ‘)[1].split(‘:’) #对时间用:分割

去掉空格

strl.strip()

大小写转换

大转小:strl.lower()
小转大:strl.upper()

判断以什么开头和结尾

strl.startwith(‘今天’)
strl.endwith(‘很好’)
返回True/False


链表

链表由节点组成,是递归的数据结构,保持数据之间的逻辑顺序,但存储弓箭不必按照顺序存储。
每个节点有两部分,左边是值域,用来存放用户数据;右边是指针域,存放指向下一个元素的指针。
最后一个节点的指针域为None值。
基本操作见
csdn

##一些基操

  1. 设置一个快指针(步长2),一个慢指针(步长1),有环的话,slow和fast总会相遇,相遇时的循环次数等于环的长度。
  2. 快慢指针相遇点到环入口的距离 = 链表起始点到环入口的距离。

时间复杂度

查找

查找 平均时间复杂度 查找条件 算法描述
顺序查找 O(n) 有序或者无序队列 按顺序比较每个元素,直到找到关键字为止。
二分查找 O(logn) 有序数组 查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
二叉排序树查找 O(logn) 二叉排序树 在二叉查找树b中查找x的过程为:1. 若b是空树,则搜索失败;2. 若x等于b的根节点的数据域之值,则查找成功;3. 若x小于b的根节点的数据域之值,则搜索左子树;4. 查找右子树。
哈希表法(散列表) O(1) 先创建哈希表 根据键值方式(Key value)进行查找,通过散列函数,定位数据元素。
分块查找 O(logn) 无序或有序队列 将n个数据元素”按块有序”划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须”按块有序”;即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……。然后使用二分查找及顺序查找。

排序

排序 最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡排序 O(n^2) O(n^2) 稳定 O(1)
插入排序 O(n^2) O(n^2) 稳定 O(1)
选择排序 O(n^2) O(n^2) 稳定 O(1)
二叉树排序 O(n^2) O(n*log2n) 不稳定 O(n)
快速排序 O(n^2) O(n*log2n) 不稳定 O(log2n)~0(n)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)