自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 上下文管理器

from queue import Queue# 自定义上下文类要实现__enter__ 和 __exit__ 方法class File: def __init__(self): self._q = Queue(maxsize=5) self.file_obj = None def __enter__(self, path, modle='rt'): if not self._q.full(): self.fi.

2020-08-26 17:25:41 132

原创 用闭包代替一个额外方法的类

import globimport osclass FindFile: """ 创建实例时指定查找文件格式 调用方法时指定文件夹路径 """ def __init__(self, path_name): self._path_name = path_name def fint_py_file(self, path=os.getcwd()): os.chdir(path) return glob.ig.

2020-08-26 17:25:00 177

原创 函数的参数

import random# 定义一个可以接受任意多个位置参数的函数def merge(*args): return random.sample(args, len(args) - 1 if len(args) - 1 > 0 else 1)# 或者我们定义一个可以指定选取个数的函数def merge_s(*args, num): return random.sample(args, num)# 或者我们想不指定num的值时候也能正常运行,那么我们可以指定一个默.

2020-08-25 15:36:28 123

原创 os和os.path

import osif __name__ == '__main__': path = 'C:/Program Files' # 获取当前工作目录 print("当前工作目录:%r" % os.getcwd()) # 改变当前工作目录支持相对路径 os.chdir('..') print("当前工作目录:%r" % os.getcwd()) # 获取指定文件夹下所有内容列表 print("path下内容列表:%r" % os.listdi.

2020-08-23 10:39:32 292

原创 zip和zip_longest

from itertools import zip_longest# zip可以创建一个迭代器,迭代器的长度和其中最短的输入序列长度相同, 示例如下:x = ['name', 'age', 'score', 'address']y = ['liming', 22, 78.6]if __name__ == '__main__': # zip函数可以添加多个序列, 不局限于两个 for m in zip(x, y): print(m, end=' ') # (.

2020-08-21 18:41:29 226 1

原创 迭代出元素的排列组合

# 排列组合# 如果你想要找出某个序列的排列组合情况,有以下三个函数可以供你使用:from itertools import permutations, combinations, combinations_with_replacementmy_items = ['c1', 'c2', 'c3']# permutations(item, length) 排列成长为length的所有可能情况,并以元组形式返回# 考虑元素位置def my_permutations(): for m in.

2020-08-21 18:28:18 263

原创 迭代器切片和过滤文本

from itertools import islice, dropwhile# 想对迭代器和生成器做切片操作x = (i ** 2 for i in range(50))# 用itertools.islice(iter, start, end)def my_slice(itor, start, end): for i in islice(x, start, end): print(i, end='\t')# 如果读取文件,想要跳过文件的所有注释行, 可以用dr.

2020-08-21 18:06:29 160

原创 datetime常规操作

from datetime import datetime, timedeltaif __name__ == '__main__': # 获取当前时间 a = datetime.today() # 或者 b = datetime.now() # 指定特定时间 c = datetime(2020, 8, 11, 17, 52, 43) print("today:{!r}".format(a)) print("now:{!r}".format.

2020-08-20 17:43:51 161

原创 random随机数常规操作

import random# random 模块采用马特赛特旋转算法, 这是一种确定性算法,可以根据random.seed函数来修改初始的种子# 产生一个0-1均匀分布的浮点数a = random.random()# 随机产生正数,可指定范围[] 范围为闭区间[0, 100]b = random.randint(0, 100)# 从序列中随机挑选一个元素values = [12, 24, 58, 69, 63, 99]c = list(random.choice(values) fo.

2020-08-20 17:01:44 235

原创 进制转换

# 内建函数 bin() oct() hex() int()# 不期望出现0b 0x 0x这样的前缀fotmatt() 'b' 'o' 'x'x = 1230if __name__ == '__main__': print("bin(x):{!r}".format(bin(x))) print("oct(x):{!r}".format(oct(x))) print("hex(x):{!r}".format(hex(x))) # 不期望出现0b等这样的字符 p.

2020-08-20 10:32:52 117

原创 数字格式化

x = 3.1415926535round(x, 2)Out[1]:3.14In[2]:round(-x, 2)Out[2]:-3.14In[3]:# 当位于中间时候, 取整偏向最近的偶数y = 1.5z = 2.5round(y)Out[3]:2In[4]:round(z)Out[4]:2In[5]:round(1.6)Out[5]:2In[6]:round(3.4)Ou...

2020-08-20 10:07:52 181

原创 文本替换2

import re# 利用函数进行复杂替换# 先来看一下官方文档的一个例子:"""def dashrepl(matchobj): if matchobj.group(0) == '-': return ' ' else: return '-'re.sub('-{1,2}', dashrepl, 'pro----gram-files')# 由于贪婪匹配,匹配配' -- ' 和 '--' 和 '-'得出:'pro--gram files'-.

2020-08-19 11:34:02 131

原创 文本匹配和替换

import re# 如果仅是简单的查找,利用字符串的内建方法如: endswith() startswith() find()即可text = 'A short life, I use python.note;2020/8/19 10:42 author'change_text_date = text.replace('python', 'java')# 较为复杂的一些匹配,如日期和时间# 加括号 引 捕获组date_match = re.compile(r'(\d+)/(\d+)/(\d.

2020-08-19 11:14:11 164

原创 利用通配符进行字符串匹配

from fnmatch import fnmatch, fnmatchcase# fnmatchcase 严格匹配# fnmatch区分大小写规则和底层文件系统相同,详见文件后缀名大小写# 三个通配符: * 、?任意单个字符 [] 中的任意一个 [! ] 取反file_lis = ['aaa.py', 'bbb.c', 'ggg.h', 'fds.csv', 'ren.c', 'max.c']c_file = [name for name in file_lis if fnmatch.

2020-08-19 09:26:34 720

原创 多种分隔符分割字符串

# split 是str的内建方法, 但是只能处理相同的分隔符import redir_py = r"F:\cpython-master\cpython-master\Python\asdl.c"master_name = dir_py.split('\\')file_name = master_name[-1]# 如果需要拆开通过 ';' 和 '//'line = 'ip:127.0.0.1;port:3306//img//a.png'# 多分隔符拆分就需要正则的split方法list.

2020-08-18 19:13:50 393

原创 合并多个映射

# 如需要将多个字典合并为一个操作试图用于查询# 可以用ChainMap类来完成dic_fir = { 'a':1, 'b':2}dic_sec = { 'c':5, 'b':7}dic_thr = { 'e':8, 'c':9}# 如果需要从这些字典里面查一个键,很不方便,需要依次遍历,现在使用ChainMap,# 就可以完成查找from collections import ChainMapd = ChainMap(dic_f.

2020-08-18 18:35:39 260

原创 分组迭代

# itertools 为高效循环而创建的迭代器函数from itertools import groupbyfrom operator import itemgetterfrom collections import defaultdictstudents = [ {'name': 'zhangsan', 'id': '125605', 'score':98.5}, {'name': 'lisi', 'id': '125612', 'score':75.2}, {'na.

2020-08-18 18:20:31 176

原创 利用生成器做数据转换

# 如果要求一个序列的平方和(或者其他数学计算)的suma = [1,2,3]sum_a = sum(x**2 for x in a)# 直接使用生成器比下面更节约内存s_a = sum([x*x for x in a])# 其他的转换如求最大值students = [ {'name': 'zhangsan', 'id': '125605', 'score':48.5}, {'name': 'lisi', 'id': '125612', 'score':75.2}, .

2020-08-18 18:18:59 130

原创 多字典集合操作

""" 对一个字典查找相同项操作 """import random# 随机创建连个字典d1 = {random.choice('abcefdvtry'): random.randint(1, 8) for i in range(5)}d2 = {random.choice('abceiuoyp'): random.randint(1, 8) for i in range(5)}if __name__ == '__main__': print(d1) # {'d': 2, 'r'.

2020-08-17 21:18:47 127

原创 对字典进行排序

""" 对一个字典进行排序 """d = { "zhangsan": 56.8, "lisi": 68.5, "wangwu": 89.5, "zhouxiong": 76.4}# 现在要根据分数进行排序(较好的解决方案)sort_score = sorted(zip(d.values(), d.keys()))# 不容易得出关联项sort_score2 = sorted(d.values())# 或者仅获取名sort_score3 = sorted(d,.

2020-08-17 21:01:47 146

原创 字典多映射类型

""" 如何让一个键映射多个值 """from collections import defaultdict"""期待目标d = { 'a': [1,2,3] # or 'a': (1,2,3) }"""# 一般方法:d = {}def add_k_vs(key, value): if key not in d: d[key] = [] d[key].append(value)""" add('a', 8.

2020-08-17 20:22:34 117

原创 优先级队列

""" 用 python/heapq实现优先级队列 """# 堆队列算法模块import heapqclass PriorityQueue: """实现一个任意的给定优先级的元素排序""" def __init__(self): self._queue = [] def push(self, item, priority): """ 将item放入优先级队列 """ # heapq内部会按照从小到大排, 而我们需要优先级高的.

2020-08-17 19:23:54 112

原创 global和nonlocal已经函数的闭包

# global 和 nonlocal# 定义一个不可变变量b 并试图先输出在更改b的值b = 5def func(a): print(a) print(b) b += a4---------------------------------------------------------------------------UnboundLocalError Traceback (most recent cal...

2020-08-13 16:58:58 136

原创 元组拆分、可迭代序列拆分

""" 元组拆分 或者更具体地称为:可迭代序列拆分"""# 可以用*args 表示将传入的可迭代对象拆分作为函数参数from typing import List, Any, Uniondef test(*args): li = [] for i in args: li.append(i if i >= 5 else []) return list(filter(None, li)) # 用None代替下: # return lis.

2020-08-10 21:09:34 887

原创 namedtuple

""" 引入具名元组 namedtuple"""from collections import namedtuple# 如构建一个三本书的书籍集Books = namedtuple("Books", ['book'])# 需要两个参数, 可以是字符串组成的可迭代序列如上,或者字符串加空格隔开如下Book = namedtuple("Book", "name author")book1 = Book('三国志', '陈寿')book2 = Book('红楼梦', '曹雪芹')book3 .

2020-08-10 20:38:14 77

原创 排序二叉树

"""实现排序二叉树根的左边一定小于根, 根的右边一定大于根"""class TreeNode: """ 树的结点数据类型 """ def __init__(self, value): """ 构建树的一个结点 """ self.left = None self.value = value self.right = Noneclass Tree(): """ 树的数据类型 ,用来操作树"".

2020-08-07 18:49:35 153 1

原创 选择排序

""" 选择排序 """def selection_sort(li): """ 选择排序 :param li: list, 待排序列表 :return: list, sorted list """ for i in range(len(li)): # 从当前的下一个开始选择最小的, 默认情况下,第一个是最小的 for j in li[i+1:]: if li[i] > j: ..

2020-08-06 19:10:10 63

转载 快速排序

""" 快速排序 -- 分治法"""def quick_sort(li): """ 快速排序 :param li: list, 待排序的列 :return: """ # 当list仅剩一个元素时候无需比较大小,直接返回值。 if len(li) < 2: return li # 标兵设为第一个, 原则来说可以随机设一个 model = li[0] # 定义左右两个空列表,用来存储产生的新子问题即新的乱.

2020-08-06 18:37:13 67

原创 归并排序

""" 归并排序 """def merge(group_left, group_right): """ 完成两个拆分的子结构的排序 Args: group_left: list, 每次拆分的两个组的第一个 group_right: list, 每次拆分的两个组的第二个 :return list, 拆分小组合并后的排序结果 """ # 存放单个小组排序后的结果 local_sorted = [] # i 存放left的下标 j 存.

2020-08-06 17:52:13 79

原创 插入排序

""" 插入排序 """import timeit""" 自己瞎想的实现 """def insert_sort(unorder_list): """ 插入排序 """ # 存放已经排好序的数据 order_lis = [] for i, elem in enumerate(unorder_list): if not order_lis: # 如果是第一次插入,首先将原数组的第一个数据插入到已排序列表 or...

2020-08-02 19:45:33 93

原创 python双向链表

"""实现双向链表, 仅练习用, 未考虑实际应用部分需要, 函数功能不完善。"""class Node(object): """节点类""" def __init__(self, elem): self.previous = None self.elem = elem self.next = Noneclass DoubleLink(object): """双向链表ADT实现""" def __init__(.

2020-08-01 20:12:37 127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除