Python基础与算法查漏补缺

一、函数可变参数

可变参数是Python函数中一种灵活的参数传递方式,允许函数接受任意数量的参数。

它的两种形式为:

*args:用于接受任意数量的位置参数,并将其打包成一个元组

**kwargs:用于接受任意数量的关键字参数,并将其打包成一个字典

#可变参数
def sum_all1(*li) :
    return sum(*li)
list1 = [1,2,3]
print(sum_all1(list1))   #6
def sum_all2(*li) :
    return sum(li)
print(sum_all2(1,2,3))   #6

#关键字参数
def print_info(**kwargs) :
    for key , value in kwargs.items() :
        print(f"{key} : {value}",end = ' ')
print_info(name = 'shald',age = 20)     #name : shald age : 20 

二、快读模版

让你的input速度快3-5倍

#快读模版,可以提高读入数据效率
import sys
input_ = lambda:sys.stdin.readline().strip()
a,b = map(int,input_().split())
print(a,b)

三、嵌套循环

多个for循环进行嵌套的简写

rows = 3
cols = 4
grid = [ (i,j) for i in range(rows) for j in range(cols) ]
print(grid)
#[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]

四、埃氏筛(时间复杂度:n loglog n)

一个数是素数,那么他的倍数一定不是素数

import math
def the_primes(n) :
    primes = [ ]
    is_prime = [True] *(n+1)
    is_prime[0] = is_prime[1] = False
    for i in range(2,int(math.sqrt(n))+1) :
        if is_prime[i] :
            for j in range(i*i , n+1 , i) :
                is_prime[j] = False
    for i in range(2,n+1) :
        if is_prime[i] :
            primes.append(i)
    return primes
print(the_primes(66))
#[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]

五、逆波兰表达式(Reverse Polish Notation,RPN)

借助栈解决后缀表达式的求值问题

def eval_rpn(tokens:list[str])->int :
    stack = [ ]
    ops = {
        '+' : lambda x , y : x + y ,
        '-' : lambda x , y : x - y ,
        '*' : lambda x , y : x * y ,
        '/' : lambda x , y : int( x / y ) #关键!向零取整而非Python默认的向下取整
    }

    for t in tokens :
        if t in ops :
            b = stack.pop( )
            a = stack.pop( )
            stack.append( ops[ t ]( a , b ) )
        else :
            stack.append( int(t) )

    return stack[ 0 ]
str1 = ["4", "13", "5", "/", "+"]
print(eval_rpn(str1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值