Python算法刷题常用tips总结【二】


在各式算法题中,常见需频繁使用到的数据处理算法代码块思路

每四位切割字符串

import re
def formatNum(num):
    num=str(num)
    pattern=r'(\d+)(\d{4})((,\d{4})*)'
    while True:
        num,count=re.subn(pattern,r'\1,\2\3',num)
        if count==0:
            break
    return num
if __name__=='__main__':
    print(formatNum(1234567890))  #12,3456,7890

判断是否包含数字

for item in arr:
   print(bool(re.search(r'\d', item[1])))
str = input("请输入某些东西:")
if str.isdigit():

-------------------------------------------
str.isalnum() 所有字符都是数字或者字母
str.isalpha() 所有字符都是字母
str.isdigit() 所有字符都是数字
str.islower() 所有字符都是小写
str.isupper() 所有字符都是大写
str.istitle() 所有单词都是首字母大写,像标题
str.isspace() 所有字符都是空白字符、\t、\n、\r

判断日期是否合法

  1. 先判断是否为闰年
     ① 年份是 4 的倍数但不是 100 的倍数
     ② 年份是 400 的倍数
  2. 根据月份确定日期的上限
      先设定各个月份对应的天数
           1、3、5、7、8、10、12最多31天
           4、6、9、11最多30天
           2月闰年最多29天,平年最多28天
def judge(year, month, day):
    leap = False   # 判断是否为闰年
    legal = False  # 判断是否合法

    # 记录 30天和 31天的月份
    month1 = {1, 3, 5, 7, 8, 10, 12}  #31天
    month2 = {4, 6, 9, 11}    #30天

    # 判断月份是否为闰年
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        leap = True
    if month in month1:
        if 1 <= day <= 31:
            legal = True
    elif month in month2:
        if 1 <= day <= 30:
            legal = True
    elif month == 2:
        if not leap and 1 <= day <= 28:
            legal = True
        elif leap and 1 <= day <= 29:
            legal = True
    return legal

善用组合选择

print(math.factorial(n)//(math.factorial(m)*math.factorial(n-m)))       #Cn(下) m(上) n个中选择m个

多维数组中固定某索引排序

key=lambda x:中可以是x[0] x[1]值,还能是x[0]/x[1]运算式

a = [[1,2],[4,5],[3,4],[0,2]]
a.sort(key=lambda x:x[0],reverse=True)
print(a)    # [[4, 5], [3, 4], [1, 2], [0, 2]]

善用enumerate — 结合索引

a = [[1,2],[4,5],[3,4],[0,2]]
print(list(enumerate(a)))  #[(0, [1, 2]), (1, [4, 5]), (2, [3, 4]), (3, [0, 2])]



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值