当前位置: 首页 > news >正文

Python刷算法题必备技巧总结

  1. 读入多行

    n,m = map(int,input().split())
    s = [[i for i in map(int,input().split())]for j in range(n)]
    
  2. 一维列表深拷贝

    b = l[:]
    
  3. 二维列表深拷贝

    b = [[l[i][j] for j in range(n)] for i in range(n)]
    
  4. 创建0二维列表

    l = [[0]*n for i in range(n)]
    
  5. 清空列表

    l.claer()
    l = []
    l  *= 0
    del l[:]
    
  6. sorted 语法:

    sorted(iterable, key=None, reverse=False)
    
  7. 常用数学运算

    abs(n)
    pow(x,y)
    sum()
    min() max()
    chr(x)将ascll码转换成字符
    ord(x)将字符转换成ascll码
    bin() oct() hex()
    
  8. filter函数

    def is_odd(x):return x % 2 == 1
    print (list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17])))
    >>>[1, 7, 9, 17]
    
  9. help(math) dir(math)

  10. 常用str函数

    n = 'a'
    n.isalpha()
    n.isdigit()
    n.lower()
    n.upper()
    n.istitle()
    n.zfill(2) #返回指定长度的字符串,原字符串右对齐,前面填充0。
    n.title() #所有单词都是以大写开始,其余字母均为小写
    n.split(' ', 1 ); # 以空格为分隔符,分隔成两个
    n.rsplit() #类似split,区别为从结尾位置开始计数
    n..strip( '0' );  # 去除首尾字符 0; 默认为空格或换行符
    
  11. 不确定行数的情况下读入

    stopword = ''
    str = ''
    for line in iter(input, stopword):str += line + '\n'
    print(str)
    
  12. 删除列表某元素的四种方法

    del list[index]
    del list[star:end]list.pop(index) #默认最后一个元素list.remove(value) #remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的
    
  13. 多个元素排序

    a.sort(key=lambda x:x['weights'])
    a.sort(keyattrgetter('age'))
    
  14. print(*["Henan" if s == "henan" else s for s in input().split()])
    
  15. 列表,元组,字典相互转换

    list(元组)
    tuple(列表)
    >>> cc = [('1',1),('2','jiqw'),('3',1372)]        
    >>> dict(cc)
    {'1': 1, '3': 1372, '2': 'jiqw'}
    >>> a = [1,2,3]
    >>> b = [4,5,6] 
    >>> dict(zip(a,b))
    {1: 4, 2: 5, 3: 6}
  16. 对字典排序

    sorted(dict)#按key排序
    sorted(key_value.items(), key = lambda kv:(kv[1], kv[0]))#按value排序
    
  17. 遍历字典

    dict.items()#返回可遍历的(键, 值) 元组数组。
    for key,values in  dict.items():print key,values
    for key in dict.keys():print(key)
    for values in dict.values():print(values)
  18. *号的作用

    printt(*arge)#作为元组 序列 args 中的每个元素,当作位置参数传进去
    printt(**arge)#作为字典 序列 args 中的每个元素,当作关键字参数传进去
    对一个普通变量使用单星号前缀,能够将这个变量拆分成单个元素。
    a = (1,2,3,4)
    b = [1,2,3,4]
    c = {'a':1,'b':2,'c':3,'d':4}
    print(*a)
    print(*b)
    print(*c)
    1 2 3 4
    1 2 3 4
    a b c d
    
  19. update方法 如果存在则更新,不存在则添加

    dict.update({key:value})
    
  20. 字典的get方法

    Help on method_descriptor:get(self, key, default=None, /)Return the value for key if key is in the dictionary, else default.
  21. python中set()下remove和discard的区别

    两者均用于删除set中的元素,当使用remove时,若删除目标元素不在指定set()中,则会报错,而discard则不会报错;两个方法均返回set中剩下的元素集合

  22. 大意:输入n和n个数字,求出现次数最多的数字。

    示例代码:

    #输入n
    n = int(input())
    #n个数字存入到L列表
    L =list(map(int, input().split()))
    #求出出现次数最多的数字
    print(max(set(L), key = L.count))#max()返回L.count(item)值最大的item,item来自set(L)
    
  23. bin(X)、oct()、int()、hex()可实现进制转换;X = int

    示例:

    >>> print(int(48),oct(48),bin(48),hex(48))
    48 0o60 0b110000 0x30
    for i in range(32):print(bin(i)[2:].zfill(5))00000
    # 或者
    for i in range(32):n = bin(i)[2:]  print(n.rjust(5,'0'))
    00001
    00010
    00011
    00100
    ……
    
  24. chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

    >>>print chr(0x30), chr(0x31), chr(0x61) # 十六进制 
    0 1 a 
    >>> print chr(48), chr(49), chr(97) # 十进制 
    0 1 a
    
  25. ord() 它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值

    >>>ord('a') 97
    >>> ord('b') 98
    
  26. join() 方法 用于将序列中的元素以指定的字符连接生成一个新的字符串。

    str = "-"; 
    seq = ("a", "b", "c"); # 字符串序列 
    print str.join( seq );
    a-b-c
    
  27. 例题:

    n, m = map(int, input().strip().split())
    l = list(map(chr, range(ord('A'),ord('Z')+1)))
    s = ''.join(l)
    ss = s
    print(s[:m])
    for i in range(1,n):ss = s[i] + ssss = ss[:m]
    print(ss)
  28. eval() 用来执行一个字符串表达式,并返回表达式的值

    >>>x = 7 
    >>> eval( '3 * x' ) 
    21
    n = eval(input().strip())
    l = list(map(int, input().strip().split()))tmp = input().split()
    m = eval(tmp[0])
    n = eval(tmp[1])square = []
    for i in range(m):t = list(map(int, input().split()))
    square.append(t)
    
  29. index() 方法

    检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常
    str.index(str, beg=0, end=len(string))
    如果包含子字符串返回开始的索引值,否则抛出异常。
    ValueError: substring not found

  30. python去掉字符串中的空白字符

    1、string.strip(s)  s是一个序列,在string的两边删除string中在序列s中的字符
    string.lstrip(s)   在string的左边删除string中在序列s中的字符
    string.rstrip(s)   在string的右边删除string中在序列s中的字符,若没有指明s,则删除空白符(包括'\n', '\r',  '\t',  ' ')2import re
    re.sub('\s','',string)  将string中的所有空白字符删除
    re.sub(['\"','\'','\s'],'',string)  将string中的所有空白字符及单双引号删除
    
  31. iter() 用来生成迭代器

    stopword = ''
    str = ''
    for line in iter(input, stopword):str += line + '\n'
    
  32. dir(py) #看有哪些方法可用

  33. help()函数是查看函数或模块用途的详细说明,而dir()函数是查看函数或模块内的操作方法都有什么,输出的是方法列表。

  34. 字符串翻转

    str='Runoob'
    print(str[::-1])
    boonuR
    print(''.join(reversed(str)))
    boonuR
    
  35. reversed 函数 返回一个反转的迭代器。

    seqList = [1, 2, 4, 3, 5]
    print(list(reversed(seqList)))
    [5, 3, 4, 2, 1]
    
  36. count()方法语法:

    str.count(sub, start= 0,end=len(string))
    
  37. pop() 函数 用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

    list.pop([index=-1])
  38. a = 12.12300             
    b = 12.00     
    c = 200.12000 
    d = 200.0     
    f = 12.1230003000>>> [1,2][True]
    2
    >>> [1,2][False]
    1
    print([int(a)==a])
    print([str(a),int(a)])
    print ('a==>',[str(a),int(a)][int(a)==a])#结果为12.123 
    print ('b==>',[str(b),int(b)][int(b)==b])#结果为12
    print ('c==>',[str(c),int(c)][int(c)==c])#结果为200.12
    print ('d==>',[str(d),int(d)][int(d)==d])#结果为200
    print('%s'%(a)) #12.123
    print('%s'%(f)) #12.1230003
    print('{:g}'.format(a))#12.123
    print('{:g}'.format(f))#12.123
    
  39. #按分数(降序)和名字(升序)排序
    h.sort(key = lambda x:(-x['score'],x['name']))
    
  40. 格式化输出

    a = 2019.12272256
    s = '201912272303'
    print(' %f\n %.1f\n %e\n %g'%(a, a, a, a))2019.1227232019.12.019123e+032019.12
    print('%s\n%15s\n%-15s\n%15.4s'%(s,s,s,s))
    201912272303201912272303
    201912272303   2019print('{} {}'.format('hello','world'))
    print('{0} {0} {1}'.format('hello','world'))
    print('{a} {a} {b}'.format(a='hello',b='world'))
    print('{0:b}'.format(3))
    print("int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:b}".format(42))
    print('{:*^30}'.format('centered'))
    print('{0} is {0:>10.2f}'.format(1.123))
    print('Correct answers: {:.2%}'.format(1/4))
    hello hello world
    hello hello world
    11
    int: 42;  hex: 0x2a;  oct: 0o52;  bin: 101010
    ***********centered***********
    1.123 is       1.12
    Correct answers: 25.00%
    format(0.0015,'.2e') #科学计数法
    
  41. 格式符

    格式符
    格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
    %s    字符串 (采用str()的显示)
    %r    字符串 (采用repr()的显示)
    %c    单个字符
    %b    二进制整数
    %d    十进制整数
    %i    十进制整数
    %o    八进制整数
    %x    十六进制整数
    %e    指数 (基底写为e)
    %E    指数 (基底写为E)
    %f    浮点数
    %F    浮点数,与上相同
    %g    指数(e)或浮点数 (根据显示长度)
    %G    指数(E)或浮点数 (根据显示长度)
    %%    字符"%"可以用如下的方式,对格式进行进一步的控制:
    %[(name)][flags][width].[precision]typecode
    (name)为命名
    flags可以有+,-,' '0+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。
    width表示显示宽度
    precision表示小数点后精度比如:
    print("%+10x" % 10)
    print("%04d" % 5)
    print("%6.3f" % 2.3)上面的width, precision为两个整数。我们可以利用*,来动态代入这两个量。比如:
    print("%.*f" % (4, 1.2))
    Python实际上用4来替换*。所以实际的模板为"%.4f"
    https://blog.csdn.net/weixin_40583388/article/details/78600101
    https://www.cnblogs.com/fat39/p/7159881.html#tag1
    
  42. 输入有多行(行数未知)

    #方法一
    import sys
    l=[]
    for line in sys.stdin:a = line.split ()print(int(a[0]) + int(a[1]))import sys
    l = []
    for line in sys.stdin:try:l += lineexcept KeyboardInterrupt:break#方法二
    import sys 
    while True:n = sys.stdin.readline()if n == '\n': break  #int(n)l = list(map(int ,sys.stdin.readline().split()))sum = 0for i in l:if i>0:sum +=iprint(sum)#方法三
    stopword = ''
    str = ''
    for line in iter(input, stopword):str += line + '\n'
    
  43. math函数

  44. 二进制转十进制

    n = input()
    print(int(n,2))
    
  45. 查看所有内置函数 dir(__builtins__)

  46. import datetime

    import datetimet_str = '2015-04-07 19:11:21'
    d = datetime.datetime.strptime(t_str, '%Y-%m-%d %H:%M:%S')datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)  
    所有的参数都有默认值0,这些参数可以是intfloat,正的或负的。
    可以通过 timedelta.days、tiemdelta.seconds 等获取相应的时间值。类名			   功能说明
    date			日期对象,常用的属性有year, month, day
    time			时间对象
    datetime		日期时间对象,常用的属性有hour, minute, second, microsecond
    datetime_CAPI	日期时间对象C语言接口
    timedelta		时间间隔,即两个时间点之间的长度
    tzinfo			时区信息对象
    
  47. 阶乘 functools.reduce

    import functools
    result = (lambda k: functools.reduce(int.__mul__, range(1, k + 1), 1))(5)
    print(result)def fn(x, y):return x*y
    def frac(n):if n<=1:if n==0 or n==1:return 1else:print('n 不能小于0')else:return functools.reduce(fn, range(1, n+1)) 
    print(frac(5))a=[1,3,5]
    b=reduce(lambda x,y:x+y,a)
    print('1.列表里面整数累加==:',b)
    1.列表里面整数累加==: 9
  48. 全排列

    import functoolsdef fn(x, y):print(x)print(y)z =[]for z0 in x:for z1 in y:z.append(z0+z1)     return zif __name__=='__main__':a, b = ['0','1','4', '9'], 3 # 4种字符,匹配5种字符print(*functools.reduce(fn, [a] * b))import itertools
    n = int(input())
    a = [i for i in range(1,n+1)]
    l = list(itertools.permutations(a,n))
    for i in l:print(*i)
    
  49. DFS连通块

    vis=[[0 for i in range(1000)] for i in range(1000)]
    dicx=[0,0,1,-1,-1,1,-1,1]
    dicy=[1,-1,0,0,1,-1,-1,1]def check(x,y):if x<0 or y<0 or x>=n or y>=m:return Falseelif vis[x][y]==1 or matrix[x][y]=='.':return Falsereturn Truedef dfs(x,y):vis[x][y]=1for i in range(8):nx=x+dicx[i]ny=y+dicy[i]if check(nx,ny)==True:dfs(nx,ny)returnif __name__=='__main__':n,m=map(int,input().split())matrix=[]num=0# for i in range(n):#     matrix.append(input().split())for i in range(n):matrix.append(input())for i in range(n):for j in range(m):if matrix[i][j]=='.':vis[i][j]=1elif matrix[i][j]=='W' and vis[i][j]==0:num+=1dfs(i,j)
    print(num)
  50. 二维迷宫

    import syssys.setrecursionlimit(100000)ny = [0, 1, 0, -1]
    nx = [1, 0, -1, 0]
    n,m = 0,0
    f = Falsedef dfs(x,y):global f , n, mif x==n-1 and y==m-1:f = Trueif vis[x][y] == 0 and d[x][y] == '.':vis[x][y] = 1#print(x,y)#print(f)for i in range(4):if 0<=x+nx[i]<n and 0<=y+ny[i]<m:dfs(x+nx[i], y+ny[i])else:returnif __name__=='__main__':n ,m = map(int, input().split())vis = [[0 for i in range(m+5)]for i in range(n+5)]d = []#f = Falsefor i in range(n):d.append(input())dfs(0,0)if(f):print('YES')else:print('NO')
  51. try:正常的操作......................
    except:发生异常,执行这块代码......................
    else:如果没有异常执行这块代码try:fh = open("testfile", "w")try:fh.write("这是一个测试文件,用于测试异常!!")finally:print "关闭文件"fh.close()
    except IOError:print "Error: 没有找到文件或读取文件失败"
    
  52. set()方法,保持原有顺序

    numbers = [1,7,3,2,5,6,2,3,4,1,5]
    new_numbers = list(set(numbers))
    new_numbers.sort(key=numbers.index)
    print(new_numbers)
    
  53. 空值

    (Python中一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的值)

    Python中的None与空字符(NULL)的区别 - CSDN博客 http://blog.csdn.net/crisschan/article/details/70312764

  54. python列表list如何去除空值
    new_list = filter(None, list)
    filter()方法返回一个新的列表List,不改变原始列表,能够有效的去除List中False,0,None,空字符串等所有等于False的元素

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Fluent 超音速射流噪声仿真分析
  • 697.数组的度
  • Marked: 一款高效、轻量级且全功能的Markdown解析器
  • 【C语言必学知识点六】自定义类型——结构体
  • 单品月GMV破4900W,2024防晒衣赛道在狂飙!
  • 以下是一些对公打款的测试方法
  • 【微信小程序】自定义 tabBar
  • 计算机毕设选题推荐-基于python的豆瓣电子图书数据可视化分析
  • Python脚本参数总结:argparse库基础用法
  • docker容器使用aconda运行python程序
  • KVM是什么,如何给一台Linux系统使用KVM技术变成好几个不同配置的Linux系统?
  • 回首“八年级上册语文课本”-----原文+感慨
  • angular xlsx-style,复杂表头样式导出
  • Redis的内存淘汰策略-noeviction
  • [kylin M900]麒麟操作系统固件修改与合成
  • [case10]使用RSQL实现端到端的动态查询
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 2017-09-12 前端日报
  • Android系统模拟器绘制实现概述
  • Brief introduction of how to 'Call, Apply and Bind'
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java8 Stream Pipelines 浅析
  • java小心机(3)| 浅析finalize()
  • Nacos系列:Nacos的Java SDK使用
  • Sass 快速入门教程
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Unix命令
  • ViewService——一种保证客户端与服务端同步的方法
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 分布式熔断降级平台aegis
  • 前嗅ForeSpider教程:创建模板
  • 微信支付JSAPI,实测!终极方案
  • # 职场生活之道:善于团结
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #每日一题合集#牛客JZ23-JZ33
  • (1)虚拟机的安装与使用,linux系统安装
  • (14)Hive调优——合并小文件
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (二)WCF的Binding模型
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (三)elasticsearch 源码之启动流程分析
  • (五)MySQL的备份及恢复
  • (一)插入排序
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 物件導向與老子思想 (OO)
  • (转) Face-Resources
  • (转)Google的Objective-C编码规范
  • (转)Oracle存储过程编写经验和优化措施
  • (转)大型网站的系统架构
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ***监测系统的构建(chkrootkit )
  • .NET Micro Framework 4.2 beta 源码探析
  • .net下的富文本编辑器FCKeditor的配置方法
  • .vue文件怎么使用_我在项目中是这样配置Vue的