文章目录
Python 语法笔记
1. python 中的Set集合
(1) 创建集合
lookup = set()
(2) add()
- 往集合中的添加数据
set.add()
(3) remove()
- 移除集合中的数据
set.remove(数据名)
例:set.remove(‘s’)
(4) set(list)
- 将列表转换为集合
set([1,2,3])
(5) set 直接赋值
- 示例:
num = [(1,3)] i,j = num[0] ## i =1,j =3
2. Python 中的基本语法
(1) 正负无穷的表示
float("inf"), float("-inf")
(2) python 的换行
- 当一个计算的语句太长,需要换行的时候,可以在后面的加上 “” 再另起一行写
- 示例:
a = 1 + \
2
a
>>> 3
(3) Python 两数交换
- 两个数值交换可以直接使用:
a,b=b,a
- 这个在数组中元素的交换也同样适用
a = 1 b = 2 a ,b =b,a print(a,b) >>>2,3
(4) 整数转换
- 二进制转十进制:int(‘二进制字符串’,2)
int('13',b)
- 十进制转k位二进制:bin(十进制数)[2:].zfill(k)
(5) zfill()
- Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
3. Python 中字符串的处理
(1) 截取字符串
s[i:j]
左闭右开, 截取字符串s的s[i]到s[j-1]的位置的子串
(2) 子串取反 [::-1]
- 两个冒号加-1位去字符串的倒串
s[i:j][::-1]
截取字符串s的s[i]到s[j-1]的位置的子串的倒串
(3) 中心扩散
- 有中心向周围扩散时,数字可能为奇数或偶数时,一个将偏移值减一,一个不减进行计算
- 例:
left= i-(max_len-1)//2
right = i+max_len//2
(4) 字符串数组转换
- 字符串转浮点数:
string = float(字符串)
- 浮点数转字符串:
f = str(浮点数)
- 数组连接成字符串
str = ''+list
(5) strip()
- 可以去除头尾指定字符
ss.strip(rmStr)
- ss.strip()参数为空时,默认去除ss字符串中头尾\r, \t, \n, 空格等字符;参数为某个字符时,可以去掉头尾指定字符噢
- 例如:
string.strip('\n')
ss.lstrip()
删除ss字符串开头处的指定字符,ss.rstrip()
删除ss结尾处的指定字符
(6) split()
str.split(str="", num=string.count(str)).
- 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
- 参数
- str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num – 分割次数。默认为 -1, 即分隔所有。
- 返回值
返回分割后的字符串列表。
4. Python的类和对象
(1) init()
(2) 类中函数的调用
-
在类中想要调用函数,首先要将类实例化为对象:
实例化为对象:class Solution: ....... s1 = Solution() # 对象实例化
-
调用类中的函数,函数的参数中有self,可以通过self调用类中的变量和方法。
-
示例:
class Solution: def ceshi(self,a): if(a==1): k =self.ceshi(2) return k return 4 so =Solution() so.ceshi(1)
5. python 的字典
(1) items()
- items() 函数以列表返回可遍历的(键, 值) 元组数组。
- 示例:
dict = {'1':'w','2':'q'} dict.items()
(2) defaultdict 默认字典
- 包引入:
from collections import defaultdict
- 当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值
dict =defaultdict( factory_function)
- 这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0
- 示例:
from collections import defaultdict dict1 = defaultdict(int) dict2 = defaultdict(set) dict3 = defaultdict(str) dict4 = defaultdict(list) dict1[2] ='two' print(dict1[1]) print(dict2[1]) print(dict3[1]) print(dict4[1])
(3) Counter 生成hash字典
from collections import Counter
计数器- 对字符串\列表\元祖\字典进行计数,返回一个字典类型的数据,键是元素,值是元素出现的次数
- 可以用其来建立哈希表
- 注:哈希表主要是用来去重
- 示例:
a= ['sd','qwe'] b =Counte(a)
6. Python 的list 列表
(1) 二维数组
- 建立二维数组且初始值全为0:
mem = [[0]*s_len for _ in range(s_len)]
(2) 一维数组
建立一位数组初始值全为0:mem = [0]*len
(3) list.sort()
-
对队列排序
-
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。默认从小到大排序。直接对源列表修改,无返回值
-
list.sort(cmp=None, key=None, reverse=False)
-
参数:
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序,即自定义特殊的排序算法。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,即可以指定比较数组或元组中的某个位置的元素。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认) -
示例:
vowels.sort(key= lambda tup:tup[1]reverse=True)
(4) list.pop() 栈
- pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
list.pop([index=-1])
- obj – 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。如果index=0,就可以认为是删除最早进入的元素。
- list.append(obj)
- append() 方法用于在列表末尾添加新的对象。
(5) list.extend()
list.extend(seq)
seq为列表- extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
(6) range()
-
左闭右开
-
对列表和字符串进行遍历:
range(start, stop[, step])
-
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)注:其中步长可以为负数
-
示例:
for i in range(3,-1,-1)
(7) 字符串-List
- 示例:
key = [ i for i in str1]
(8) insert
-
list.insert(index, obj)
-
参数
index – 对象 obj 需要插入的索引位置。
obj – 要插入列表中的对象。 -
示例:
aList = [123, 'xyz', 'zara', 'abc'] aList.insert( 3, 2009) Final List : [123, 'xyz', 'zara', 2009, 'abc']
(9)列表复制
- python列表的等号复制时浅层次的复制,即只是讲指针指向数组的地址。两者共享内存,数组的改变会使两者一起改变。
- 实现数组深复制可以使用copy函数或者数组[:]
- 示例:
a = b # 浅复制 a = b.copy() #深复制 a = b[:] #深复制
7. 链表
(1) listNode 节点
- listNode链表节点一般定义为val,next。
- 注意链表的复制是将指针指向节点,即指向这个节点所在的存储空间,并不会建立新的存储空间,所以这个的节点里面的改变,这个复制的节点也会同步改变,因为使用的是指针。
(2) ListNod节点定义
class ListNode(object):
def __init__(self):
self.val = None
self.next = None
8. python中json数据
(1) dumps和dump的用法。
- 区别:dumps 写入的直接是dict 而dump则dict和文件对象
示例:with open("fucker.txt", "w", encoding="utf8") as f: f.write(json.dumps(dict, ensure_ascii=False))
with open("fuck.txt", "w", encoding="utf8") as f: json.dump(dict, f, ensure_ascii=False)
- load 和 loads的应用
- loads直接读入的字符串的dict,而load则是字符串dict和文件对象
示例:with open("fuck.txt", "r", encoding="utf8") as f: print(json.load(f))
with open("fucker.txt", "r", encoding="utf8") as f: print(json.loads(f.read()))
- loads直接读入的字符串的dict,而load则是字符串dict和文件对象
- ensure_ascii=False的用法
‘中国’ 中的ascii 字符码,而不是真正的中文。使用上面那个代码是因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:
示例:json.dump(dict, f, ensure_ascii=False)
9. Python 中的基本函数
(0) with 语句
- with是python中上下文管理器,简单理解,当要进行固定的进入,返回操作时,可以将对应需要的操作,放在with所需要的语句中。比如文件的写入(需要打开关闭文件)等。
- 示例:
with open('x.txt') as f: 在这个with情况下的操作语句 f.close()
(1) python中type、dtype、astype 的用法
- type 获取数据类型
- dtype 数组元素的类型
- astype 修改数据类型
- 示例:
df['Day']astype(int)
(2) endswith()
- 作用:判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型
- 相关函数:判断字符串开头 startswith()
string.endswith(str, beg=[0,end=len(string)])
- 示例:
f.endswith("zip")
- 参数说明:
string: 被检测的字符串
str: 指定的字符或者子字符串(可以使用元组,会逐一匹配)
beg: 设置字符串检测的起始位置(可选,从左数起)
end: 设置字符串检测的结束位置(可选,从左数起) 如果存在参数 beg 和 end,则在指定范围内检查,否则在整个字符串中检查
返回值: 如果检测到字符串,则返回True,否则返回False。
(3) assert()
- assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 常在测试中用
- 示例:
assert len(zFile.namelist()) == 1
(4) format 格式化函数
- 一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。 - format 函数可以接受不限个参数,位置可以不按顺序。
- 示例:
"{} {}".format("hello", "world")# 不设置指定位置,按默认顺序
"{1} {0} {1}".format("hello", "world")# 设置指定位置
- 格式化输出
-
’b’ - 二进制。将数字以2为基数进行输出。
-
转换
‘c’ - 字符。在打印之前将整数转换成对应的Unicode字符串。
‘d’ - 十进制整数。将数字以10为基数进行输出。
‘o’ - 八进制。将数字以8为基数进行输出。
‘x’ - 十六进制。将数字以16为基数进行输出,9以上的位数用小写字母。
‘e’ - 幂符号。用科学计数法打印数字。用’e’表示幂。
‘g’ - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。
‘n’ - 数字。当值为整数时和’d’相同,值为浮点数时和’g’相同。不同的是它会根据区域设置插入数字分隔符。
‘%’ -百分数。将数值乘以100然后以fixed-point(‘f’)格式打印,值后面会有一个百分号。 -
>>> print('{0:b}'.format(3)) 11 >>> print('{:c}'.format(20)) >>> print('{:d}'.format(20)) 6 20 >>> print('{:o}'.format(20)) 24 >>> print('{:x}'.format(20)) 14 >>> print('{:e}'.format(20)) 2.000000e+01 >>> print('{:g}'.format(20.1)) 20.1 >>> print('{:f}'.format(20)) 20.000000 >>> print('{:n}'.format(20)) 20 >>> print('{:%}'.format(20)) 2000.000000% >>>
-
(5) sorted() 函数
- 自定义排序函数
- sorted() 函数对所有可迭代的对象进行排序操作
- sort 与 sorted 区别:
- sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
- list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted(iterable, cmp=None, key=None, reverse=False)
- 参数说明
- iterable – 可迭代对象。
- cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)
- sorted() 函数是python可以直接使用
- 引入函数
import functools
- sored中的函数可以传递给自定义函数
data= sorted(list,key=functools.cmp_to_key(compare))
key=functools.cmp_to_key(自定义函数),
这里面的自定义函数必须需要返回函数值为1,-1,0这些函数值来确定自己的比较的规则。
(6) argmax()
- 返回一组数据中最大值所对应的序号
- 如:返回y值最大的所对应的x的值,在pd的列中的返回这一列最大值所对应的索引
- 示例:
df['Day'].argmax()
(7) enumerate()
- 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
- 示例:
for index, item in enumerate(list1, 1): print index, item
(8) eval()
- eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。
- 使用eval可以得到字符串的结果,如一段命令的字符串,使用eval之后会执行这段命令。一个字典的形式的字符串执行之后的会得到字典
- 示例:
a = "{'a':1}" a = eval(a) #得到的结果为 a = {'a':1}
(9) nonlocal与global
- nonlocal:允许内嵌函数修改定义在语法上位于外层的函数的作用域中的一个或者多个名称
nonlocal[变量名]
(10) bisect
- 二分查找和插入
- bisect用法:
import bisect bisect.bisect_left(t,x) #在T列表中查找x,若存在,返回x左侧位置 bisect.bisect_right(t,x) bisect.insort_left(t,x) #在T列表中查找X,若存在,插入x左侧; bisect.insort_right(t,x)
(11) ord 函数ASCII值
- ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
ord(c)
c为字符- 示例:
ord('a')
10. Python中的Tqdm进度条模块
(1) Tqdm 简介
- Tqdm是一个快速,可扩展的Python进度条
- 可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)
(2) 引入Tqdm模块
from tqdm import tqdm
-
参数说明
iterable=None, 可迭代的对象, 在手动更新时不需要进行设置,可以为list列表、set集合或者为range(23)
desc=None, 传入str类型,作为进度条标题(类似于说明)
total=None, 预期的迭代次数
leave=True, file=None,
ncols=None, 可以自定义进度条的总长度
mininterval=0.1, 最小的更新间隔
maxinterval=10.0, 最大更新间隔 -
代码示例:
for i in tqdm(range(100),desc =’下载进度'): # tqdm(range(100)) 等价于 trange(100) time.sleep(0.1) pass
trange(i) 是对tqdm(range(i)) 特殊优化过的实例。
(3) for 更新
- 通过在for循环外部初始化tqdm,可以打印其他信息
- 示例:
pbar = tqdm(["a", "b", "c", "d"]) for char in pbar: pbar.set_description("Processing %s" % char)
(4) with()更新
- 用with 语句手动控制 tqdm() 的更新
- 示例:
with tqdm(total=100) as pbar: for i in range(10): pbar.update(10)
(5) close()
- 不用with语句,但是最后需要加上del或者close() 方法。
- 示例
pbar = tqdm(total=100) for i in range(10): pbar.update(10) pbar.close()
(6) tqdm.update()
- 方法用于手动更新进度条,对读取文件之类的流操作非常有用
- 示例:
t = tqdm(total=filesize) # Initialise for current_buffer in stream: 操作 t.update(len(current_buffer)) t.close() `