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] + ss
        ss = 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.122723
     2019.1
     2.019123e+03
     2019.12
    print('%s\n%15s\n%-15s\n%15.4s'%(s,s,s,s))
    201912272303
       201912272303
    201912272303   
               2019
    
    print('{} {}'.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 += line
        except 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 = 0
        for i in l:
            if i>0:
                sum +=i
        print(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 datetime
    
    t_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 1
            else:
                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 functools
    
    def fn(x, y):
        print(x)
        print(y)
        z =[]
        for z0 in x:
            for z1 in y:
                z.append(z0+z1)     
        return z
    
    if __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 False
    
        elif vis[x][y]==1 or matrix[x][y]=='.':
            return False
    
        return True
    
    def dfs(x,y):
        vis[x][y]=1
        for i in range(8):
            nx=x+dicx[i]
            ny=y+dicy[i]
            if check(nx,ny)==True:
                dfs(nx,ny)
        return
    
    
    if __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]=1
                elif matrix[i][j]=='W' and vis[i][j]==0:
                    num+=1
                    dfs(i,j)
    print(num)
    
    
  50. 二维迷宫

    import sys
    
    sys.setrecursionlimit(100000)
    
    ny = [0, 1, 0, -1]
    nx = [1, 0, -1, 0]
    n,m = 0,0
    f = False
    
    def dfs(x,y):
        global f , n, m
        if x==n-1 and y==m-1:
            f = True
        if 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:
            return
    
    if __name__=='__main__':
    
        n ,m = map(int, input().split())
        vis = [[0 for i in range(m+5)]for i in range(n+5)]
        d = []
        #f = False
        for 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)的区别 - 优快云博客 http://blog.youkuaiyun.com/crisschan/article/details/70312764

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值