Python 使用中的不知道的技巧

在这里插入图片描述

人生苦短,我用pyhton

今天我来分享一些我自己记录的代码结构

简洁的表达式




   # 快速构建字典序列
    dict = dict(zip('abcd',range(4))) 
    # {'a':0,'c':2,'b':1,'d':3}
    
    # 类似三元运算符
    return 'ok' if a == 1 else 'error'
    
    # 列表生成字典
    list  = ((1,'a'),(2,'b'))
    
    dict1 = { x[0]:x[1] for x in list } 
    
    dict2 = { x:y for x in range(4) for y in range(10,14) }
Python因为简洁高效而出名,就是因为语法非常简单,而且内置了很多强大的数据结构
比如我们可以用if else组合,本来需要2-3行代码写的,一行搞定!

排序 (使用heapq类库)


    import heapq
    
    nums = [2,14,32,2,46,89]
    
    max   = heapq.nlargest(3,nums) # [89,46,32]
    
    min   = heapq.nsmallest(3,nums) # [2,2,14]
    
    students = [
        {'name':'aa','scores':100,'height':183},
        {'name':'bb','scores':99,'height':178},
        {'name':'cc','scores':60,'height':155}
    ]
    height_student = heapq.nsmallest(1,students,key=lambda x:x['height'])
    # [{'name':cc,'scores':60,'height':155}]

查询


    # filter 配合 lambda
    list1 = ['rice','bread','beef','milk','water','egg','fish','coke','walk','wash','wallet']
    wa_head = filter(lambda x:x.startswitch('wa'),list1)
    # ['water','walk','wash','wallet']
    
    # 使用 正则 过滤
    
    wa_head = filter(lambda x:x.re.findall(u'(wa_)',x),list1)
    
    
    # 如果  列表  里是一个   字典
    
    list2 = [
        {'a':100},
        {'b':90},
        {'c':80}
    ]
    wa_head = filter(lambda x: 'a' in x.keys() ,list1)
如果想学好爬虫,还需要对正则很熟练!!!

层层嵌套 list


    
    list = [ 1, [2,[3,4] ]]
    #  传统方法,迭代+递归
    res = []
    def fun(s):
        for i in s:
            if isinstance(i,list):
                fun(i)
            else:
                res.append(i)
                

    fun(list)
    
    # 方法2 ,使用  lambda 表达式
    flat  = lambda L:sum(map(flat,L),[]) if isinstance(L,list) else [L]
    res  = flat(list)
    
    
    # 方法3,使用  lambda +迭代
    
    flatten = lambda x:[y for i in x for y in flatten(i)] if type(x) is list else [x]
    res = flatten(list)
    

带条件的推导列表


    
    # 一个条件
    a = [x/2 for x in range(10)  if x%2 ==0]  # range(10) 0-9
    # [0.0,1.0,2.0,3.0,4.0]
    
    # 多个条件
    b = [x for x in range(30) if x%2 == 0 and x%6 == 0]
    # [0,6,12,18,24]
    
    # 用 if-else 语句
    c = [x+1 if x>=5 else x*10 for x in range(10)]
    # [0,10,20,30,40,6,7,8,9,10]
    
    # 嵌套推导列表
    list_list = [[1,2,3,4],[5,6],[7,8]] 
    d = [y for x in list_list for y in x]   # 此函数必须让参数必须全部嵌套,如果[1,[2,3]]就会出错
    #[1,2,3,4,5,6,7,8]

添加字典


    options = {'code':'utf-8'}
    
    base_headers = {
        'User-Agent':100,
        'Accept-Encoding':'gzip,sdch',
        'Accept-Language':'zh-Ch'
    }
    
    # 方法1 ,传统方法,生成新的字典
    headers = dict(base_headers,**options)
    
    # 方法2,update,在一个字典上添加
    base_headers.update(options)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值