基础语法复习

常用的定义:

读取数据加速:

input = sys.stdin.readline

设置递归深度:

sys.setrecursionlimit(100000)

记忆化搜索:

from functools import lru_cache 
@lru_cache(maxsize=None)

计数器:

Counter 类是一个非常有用的工具,用于对可迭代对象中的元素进行计数。

例如,假设您有一个列表,其中包含一些元素,您想知道每个元素在列表中出现了多少次,这时您就可以使用 Counter

以下是一个简单的示例:

from collections import Counter # 创建一个列表 
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'] # 使用 Counter 对象统计列表中元素的出现次数 
my_counter = Counter(my_list) # 输出每个元素的出现次数 
print(my_counter)

这将输出:

Counter({'apple': 3, 'banana': 2, 'orange': 1})

自定义排序

functools.cmp_to_key(func)

旧式函数,在类似于吗sort,min等函数上使用

此函数主要用作将 Python 2 程序转换至新版的转换工具,以保持对比较函数的兼容。比较函数是任何接受两个参数,对它们进行比较,并在结果为小于时返回一个负数,相等时返回零,大于时返回一个正数的可调用对象。 键函数是接受一个参数并返回另一个用作排序键的值的可调用对象。示例:sorted(iterable, key=cmp_to_key(locale.strcoll))

蓝桥2122

import functools

n = int(input())
m = int(input())

def compare(a, b):
    sum1 = sum(map(int, str(a)))  # 计算a的各个数字之和
    sum2 = sum(map(int, str(b)))  # 计算b的各个数字之和
    
    if sum1 > sum2:
        return 1
    elif sum1 == sum2:
        if a < b:
            return -1
        else:
            return 1
    else:
        return -1

s = list(range(1, n + 1))
s.sort(key=functools.cmp_to_key(compare))
print(s[m-1])

基本数据类型:

 集合的妙用:

注意,使用集合去重之后不一定能保证原来的顺序。

#!/usr/bin/python3

sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}

print(sites)   # 输出集合,重复的元素被自动去掉

sites.add(6) # 添加元素6

sites.remobe(5) # 删除元素5

# 成员测试
if 'Runoob' in sites :
    print('Runoob 在集合中')
else :
    print('Runoob 不在集合中')


# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a)

print(a - b)     # a 和 b 的差集

print(a | b)     # a 和 b 的并集

print(a & b)     # a 和 b 的交集

print(a ^ b)     # a 和 b 中不同时存在的元素

 字典

#!/usr/bin/python3

dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2]     = "2 - 菜鸟工具"


tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}


print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值
print (tinydict.items())  # 输出项
print (tinydict.get('name'))# 输出runoob
print (tinydict.copy())   # 复制字典

tinydict.pop('name') # runoob
tinydict.popitem('name', 'runoob')

字符串

find(str, beg=0, end=len(string))


检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1

count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

count()方法语法:

str.count(sub, start= 0,end=len(string))
  • sub -- 搜索的子字符串
  • start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
  • end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。

replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

replace()方法语法:

str.replace(old, new[, max])
  • old -- 将被替换的子字符串。
  • new -- 新字符串,用于替换old子字符串。
  • max -- 可选字符串, 替换不超过 max 次

 

test = "123"
test.ljust(10,'0') # 左对齐,空位补0
test.rjust(10,'0') # 右对齐,空位补0

 

内置函数

list.sort( key=None, reverse=False)

  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。

.format()格式化方法

位置参数:0,1,2

enumerate(iterable)

生成二元组的迭代对象

 zip(iter1,iter2..)

方法用于返回各个可迭代参数共同组成的元组

小技巧冷知识:

int('2022',9) 9进制的2022转为10进制

math库

abs(x)返回数字的绝对值,如abs(-10) 返回 10
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
pow(x, y)x**y 运算后的值。
round(x [,n])

返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。

其实准确的说是保留值将保留到离上一位更近的一端。

math.log(x, base) :以base为底的对数

for else循环体

itertools

accumulate累乘

from itertools import accumulate

 

 time模块

import time

 

t = time.localtime() # 本地时间
print(t.tm_year) # 查看年份

格式化日期 

# 格式化日期
t = time.strftime("%Y-%m-%d %H:%M:%S", t) # 时间转字符串
print(type(t))
print(t)

输出如下: 

 

import time

t_str = "2023--10--09 13::03::13"
t_tuple = time.strptime(t_str, "%Y--%m--%d %H::%M::%S") # 字符串转时间

datetime模块 

date类

a = datetime.date(2023,10,1)
print(type(a))
print(a)

 

# 获取年月日,星期
print(a.year) # 年
print(a.month) # 月
print(a.day) # 天数
print(a.weekday()) # 周几

注意:weekday从0开始算,也就是星期一实际上是0 

 

a = datetime.date(2023,10,1)
b = datetime.date(2023,10,7)
print(type(a - b))
print(a - b)
# 支持和另外一个date进行判断
print(a < b)

 

 time类

import datetime
a = datetime.time(10, 25, 30) # 时间不允许做加减法,但是支持判断
print(a.hour)
print(a.minute)
print(a.second)

 datetime类

获取方式和前面相同

但是有两个特别的

a = datetime.datetime(2023, 10, 1, 10, 25, 30)
print(a.date())
print(a.time())

组合方法

a = datetime.date(2023,10,1)
b = datetime.time(10, 25, 30)
c = datetime.datetime.combine(a,b)
print(c)

 timedelta类

时间差:表示两个datetime对象之间的间隔

用days,seconds,microseconds(微秒)三个变量存储时间间隔

定义时可以传入:weeks,days,hours,minutes,seconds,milliseconds,microseconds然后自动转换成上述变量

datetime与timedelta进行加减可以得到新的datetime

而datetime之间进行减法,得到timedelta

a = datetime.datetime(2023,10,1,10,25,30)
delta = datetime.timedelta(days=100)
b = a + delta # 计算100天之后的日期
print(b)

格式化

import datetime
d = datetime.date(2023,10,1)
print(d.strftime("%Y--%m--%d"))
t = datetime.time(17,25,35)
print(t.strftime("%H::%M::%S"))

 基于这个日期,转为字符串。

应用:蓝桥611 

import os
import sys

# 请在此输入您的代码
import datetime
start_time = datetime.date(1901,1,1)
end_time = datetime.date(2000,12,31)
delta = datetime.timedelta(days=1)
count = 0
while start_time < end_time:
  if start_time.weekday() == 0:
    count += 1
  start_time += delta
print(count)

一、chr

chr( {需要转换的Unicode编码} ),返回值是对应的字符

例1:输入数字 65-91,返回值是大写字母

chr(65) # A
chr(90) # Z

例2:输入数字 97-122,返回值是小写字母

chr(97) # a
chr(122) # z

二、ord

ord( {需要转换的字符} ),返回值是对应的Unicode编码

例1:

ord('b') # 98

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值