Python的一些进阶学习-2017.08.07

一.列表,字典,集合的筛选

  1. 列表 的筛选
    列表的筛选 有两种:

    1.   filter 
        #通过列表解析随机推导定义一个列表
                In [2]: data =[randint(-10,10) for _ in xrange(10)]
                In [3]: data      
                Out[3]: [10, -1, -3, 10, -7, -10, -9, 8, -9, 7]
                #通过filter函数筛选  (其实可以去看看filter源码咋实现的)
                In [4]:  filter(lambda x: x>0 ,data)
                Out[4]: [10, 10, 8, 7]
    
     2. 列表解析推导
    
                In [6]: [x for x in data if x>=0]
                Out[6]: [10, 10, 8, 7]
    
          突然想知道两种方式 哪种更优呢?
    
           In [7]: timeit filter(lambda x:x>=0 ,data)
           1000000 loops, best of 3: **1.39 µs** per loop
    
           In [8]: timeit [x for x in data if x>=0]
           1000000 loops, best of 3: **545 ns** per loop
    
           **发现列表解析通常比filter 更快**                     
    
  2. 字典的筛选
    随机生成一个集合。
    In [9]: {x: randint(60,100) for x in xrange(1,21)}
    通过列表解析 键值对 来筛选 (比较简单)
    In [15]: {k:v for k,v in d.iteritems() if v>90}
    Out[15]: {3: 95, 10: 97, 15: 96}

  3. 集合的筛选
    继续用刚才的data给他转成集合:
    In [16]: s= set(data)
    In [17]: s
    Out[17]: {-10, -9, -7, -3, -1, 7, 8, 10}
    就用集合解析好了:
    In [18]: {x for x in s if x>=0}
    Out[18]: {7, 8, 10}
    跟列表解析差不多 类似, 和字典解析的区别在于,字段多一个: ,多一个键值对的概念

二.为元组每个元素命名,提高程序的可持续发展~

1.      通过枚举的方式定义变量
           #!/bin/python
           #-*- coding: UTF-8 -*-
           #name = 0
           #sex = 1
           #age = 2
           #location= 3
           #email = 4

           name,sex,age,location,email = xrange(5)

           Student=('Gil','Male','28','zhejiang','woshigezhipeng@sina.com')
           print Student[name]
           print Student[sex]
           print Student[age]
           print Student[location]
           print Student[email]

2.     通过标准库 collection.namedtuple

      In [2]: from collections import namedtuple
      #通过namedtuple定义一个student类
      In [4]: student =namedtuple('student'['name','sex','age','location','email'])   
     #定义一个student对象,并赋值 
      In [5]: s=student('gil','male','28','zhejiang','woshigezhipeng@sina.com')
      In [7]: s.name
      Out[7]: 'gil'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值