python 算法小技巧

a = input() # 取出一行
a = list(map(int, input().split())) # 取出一行,并将行中的数据以空格分割,并对分割后的数据变成int类型,生成list
a = eval(string)  #对表达式string进行数学运算
a = " ".join(arr) # 将list 类型的arr以空格拼接成字符串
arr.sort()    # 对arr排序:升序,无返回值
a = arr[::-1]     # arr逆序
a = math.sqrt(data) # 求data的平方根
string = '0' * n    # 字符串复制,string为长度为n,内容皆为 '0'组成
arr    = [0] * b     # arr复制,长度为n,元素皆为 0
result.isdigit()     # 判断result是否为数字类型
result.isalpha()     # 判断result是否为字母字符串类型
result.isalnum()     # 判断result是否为数字或者字母字符串类型
string = string.swapcase()  # 调整字符串的大小写:即大写的转换为小写,小写的转换为大写
zip(xList, yList)    # 建立xList 与yList的映射
bin(data) # 正整数转化为二进制数据: bin(5) --> '0b101'
进制转换
    16进制:0xA - 10  0xB - 11 0xC - 12 0xD - 13 0xE - 14 0xF - 15
字符串大小写转换:
    string.upper() # string转换为大写
    string.lower() # string转换为小写
ASCII码转换:
    ord('A') = 65 ord('Z') = 90 ord('a') = 97 ord('z') = 122
  chr(65) = 'A' chr(65) = 'Z' chr(97) = 'a' chr(122) = 'Z'
等差数列: 
    差值为3:则第n个数为:  N = 3n - 1
    等差数列的和为:       SUM = (start + end) * n / 2 = ((2 + 3*n - 1) * n) / 2
查找两个字符串a,b中的最长公共子串: 
    可以利用滑动窗口思路进行处理,窗口起始大小为短字符串的长度,内部遍历则对长字符串截取,截取长度为当前窗口的长度:long[j:j+length]
瑞年:能被400整除 or 能被4整除且不能被100整除,瑞年的2月份是29天,非瑞年则为28天。
每个月对应的天数:(数手指)需要注意7、8月份天数为31天。
# 排列组合
# 字典排序 dict_res = {1:[1,2,3], 2:[-1,1, 1], 3:[1,2,2]} 
# key=lambda x: [x[1][0], x[1][1], x[1][2]] 表示按照字典中的元素value的3个值进行升序排序,即 order by 列0,列1,列2 ASC
res = sorted(dict_res.items(), key=lambda x: [x[1][0], x[1][1], x[1][2]])
# 排序后:res = {2:[-1,1,1], 1:[1,2,3], 3:[1,2,2]}
from itertools import permutations
x = permutations(['A', 'B', 'C'], 3)        # arr中一次性取3个元素做全排列
print(list(x))  # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

from itertools import product         # 注意repeat 参数必填
random_list = list(product(['西藏','瀑布','湖水'], repeat=3)) # 从arr中重复取3次元素做全排列
print(random_list)

import bisect
# arr升序排列, index为arr插入data[i]时的位置,len(arr)-p 即为逆序对的数量
# 比如: [1,3,5,6,7,8] 中插入4,即index= 2,即逆序对为 6 - 2 = 4,也就是比4大的数有4个
p = bisect.bisect(arr, data[i])

import math
a = math.sqrt(data) # 求data的平方根:浮点数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值