首页 > 编程语言 >Python算法题头部与模板

Python算法题头部与模板

时间:2023-01-04 15:02:47浏览次数:42  
标签:arr 下标 Python alloc bisect 算法 read readline 模板

头部

import sys; readline = sys.stdin.readline
read = lambda: [int(x) for x in readline().split()]
alloc = lambda *s: len(s) != 1 and [alloc(*s[1:]) for i in range(int(s[0]) + 2)] or [0] * int(s[0] + 2)
bet = lambda a, b : a <= b and range(a, b + 1) or range(a, b - 1, -1)

语法说明

  1. x and y or z 相当于C语言中的 x ? y : z
  2. *s 是一个可变参数。s可以当成元组,保存了所有输入的参数。
  3. *s[1:] 取得s中下标从1开始的所有元素形成一个元组,*表示unpack,将元组中的每个值作为alloc的参数。

说明

  1. readline()可以读取一行输入
  2. n, = read() 可以利用unpack来读取一个整数,逗号不能省。
  3. n, m, c = read() 可以利用unpack来读取多个整数
  4. tex = [read() for i in range(n)] 可以读取多行整数数列并且形成2维数组
  5. f = alloc(n1, n2, n3, ..., nk) 相当于 int f[n1 + 2][n2 + 2][n3 + 2]...[nk + 2];元素初始化为0
  6. alloc在每个维度在输入上加了2,迭代时下标可以从1开始,而且-1的下标也不会影响到正常的使用
  7. alloc内进行强转为int,保证1e5这样的输入也能正确运行
  8. 尽量不要再使用input(),使用readlineread几乎可以满足所有输入需求。使用sys.stdin.readlineinput效率更高。有些题目必须用sys.stdin.readline才能过,否则会超时。
  9. 通常可以arr = [0] + read(),使得下标可以从1开始,更方便
  10. bet即between,因为python自带的range是左闭右开区间,每次都要在右区间加1有点麻烦而且不符合直觉

简化版alloc,自行处理维度

alloc = lambda *s: len(s) != 1 and [alloc(*s[1:]) for i in range(s[0])] or [0] * s[0]

标准库

bisect

import bisect
# arr是排好序的列表
n = len(arr)
greater = n - bisect.bisect_right(arr, x) # arr中有多少个数严格大于x
lesser = bisect.bisect_left(arr, x) # arr中有多少个数严格小于x

说明

  1. bisect.bisect_left返回大于等于x的第一个下标(相当于cpp的lower_bound)。
  2. bisect.bisect_right返回大于x的第一个下标(相当于cpp的upper_bound)
  3. n - greater 即为小于等于x的数量
  4. n - lesser 即为大于等于x的数量

datetime

import datetime
date1 = datetime.date(2022, 12, 30)
delta = datetime.timedelta(days=1)
date1 += delta # 下一天
year, month, day = date1.timetuple()[:3]
weekday = date1.isoweekday() # 星期,从1到7
passdays = date1.timetuple().tm_yday # 当年的第几天,从1到365

说明

  1. 用来应付恶心的日期题

细节

if a < b: a = b 要比 a = max(a, b) 更快

标签:arr,下标,Python,alloc,bisect,算法,read,readline,模板
From: https://www.cnblogs.com/iku-iku-iku/p/17024822.html

相关文章

  • [算法]图(邻接矩阵)的深度遍历
    packagecom.FeeLang;importjava.util.Scanner;classArcNode{intadjvex;ArcNodenext;}classVertexNode{charvertex;ArcNodefirstedge;}publicclassGraph......
  • C++ invoks Python ~ int64_t and __int64
     #include<Python.h>intmain(){return}利用如上代码(cpppython.cc)测试C++调用python(version2.6.2),g++编译出现如下错误:通过错误可知__int64不是C++的支持的整型类......
  • 【Kelm回归预测】基于粒子群算法优化核极限学习机实现数据回归预测附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • python并发
    并发方式线程(​​Thread​​)多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外)。然而......
  • 密码算法应用规范
    术语解释对称算法(Symmetrickeyalgorithm):采用相同的密钥执行加密或解密。非对称算法(Asymmertrickeyalgorithm,公开密钥算法):用作加密的密钥不同于用作解密的密钥,而且解密密......
  • Python 笔记 1
    Python基础1.基本操作crtl+s保存“#”表示注释(单行)‘‘‘’’’多行注释“\”表示行的链接(如a=zxcvbnm||a=zxcvbnm)2.对象包括标识,类型,值例:Python中一......
  • python 每天一个知识点 第二天
    元组元组和列表的区别:1. 元组与列表类似,不同之处在于元组的元素不能修改2.元组使用小括号,列表使用方括号3,元组没有append(),insert()这样的方法。其他获取元素的方法和......
  • 如何用python对接电商平台店铺所有商品数据接口
    前言item_search_shop-获得店铺的所有商品接口,可以通过店铺ID或者是店铺主链接请求接口拿到店铺商品详情页面的商品标题,商品价格,商品优惠价,商品视频,商品图片,商品sku属性,商品......
  • 本地python环境安装kylin项目依赖时报认证错误信息
    问题描述:项目需要连接kylin数据库查询数据,本地安装kylin项目的依赖环境后报认证错误python版本3.732位pycharm版本2022版成功方法:更换解释器选择无解释器,创建虚......
  • python内置方法
    内置方法Python解释器内置了许多函数和类型,这些函数和类型始终可用。按照使用的频率做如下排序排序点击查看代码#----------------------------排序---------......