在各式算法题中,常见需频繁使用到的数据处理算法代码块思路
每四位切割字符串
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
判断日期是否合法
- 先判断是否为闰年
① 年份是 4 的倍数但不是 100 的倍数
② 年份是 400 的倍数 - 根据月份确定日期的上限
先设定各个月份对应的天数
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])]