Python算法技巧

作为一个ACMer,我最常用c++做算法题
现在为了学习python,也开始使用python练习算法题
本文将记录在使用python做算法题时会使用的的一些技巧

输入

int输入

python的输入一般使用input()函数进行
默认输入的是字符串类型
因此需要输入int类型是可以直接进行转换

n=int(input())

使用input()函数时可以加上strip()函数
用于移除字符串头尾指定的字符(默认为空格)或字符序列
可以避免一些再多行输入时的错误

n=int(input().strip())

一行输入多个数字

例如输入n和m
使用map函数进行类型转化
使用strip函数将字符串以空格进行分割

n,m=map(int,input().strip().split())

一行输入n个数字

c++中我们一般直接循环输入数组即可
再python中input()函数一次就读入一行,做不到以空格分割输入
因此我们直接读入一行之后然后进行分割
例如:读入一行n个整数,以空格分割

line=input()
a=map(int,line.split())

这样以后这n个数字就存储在a[0]-a[n-1]之中了

输出

print函数

print()函数输出时可以制定多个输出之间的间隔符和输出结束时所跟的符号
sep参数定义多个输出之间的间隔符号
end参数定义print输出结束后会输出什么(默认是换行)

print(a,b,c,sep=" ",end=" ")

格式化输出(小数)

三种输出方式

#format类型,使用函数
print("{:.1f}".format(a))
#% formatting类型,类似printf
print("%.1f"%a)
#f-string类型,最新,最好用,最常用
print(f"{a:.1f}")

定长数组定义

#创建长度为n的列表,初始值都为""
ma=[ "" for _ in range(lenn) ]
#创建n*n的列表,初始值都为0
ma1=[[ 0 for _ in range(n) ] for _ in range(n)]

三目运算符

  • python3没有三目运算符,使用if else的形式代替
  • value1 if bool1 else 值2 if bool2 else value3 if bool3 …
  • bool1true时,值为value1,或者bool2true时,值为value2,最后一个可以不加if
b='a'
a=1 if b=='a' else 2 if b=='b' else 3

结构体

定义和使用方式如下

class People:#结构体的名称
    def __init__(self) -> None:#构造函数,写法固定不变
    	#定义结构体的成员变量和初始值
        self.name=""
        self.ident=""
        self.contribute=0
        self.level=0
        self.id=0

now = People()
now.name="zhangsan"
now.ident="lowyer"
now.contribute=100
...

sort函数

python3的列表可以直接使用sort函数进行排序
用法如下:

def cmp(x):
    return (-x.a,x.b)

now1=People()
now1.a=1
now1.b=2
ans.append(now1)
now2=People()
now2.a=3
now2.b=4
ans.append(now2)

ans.sort(key=cmp)

排序方式使用key参数进行定义
cmp函数需要返回元组,元组中的顺序就是排序时的顺序

  • -x.a表示按照x.a递减排序
  • x.b表示按照x.b递增排序
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值