zoukankan      html  css  js  c++  java
  • python 基础 切片 迭代 列表生成式

    对list 进行切片
      如列表
        L = ['Adam', 'Lisa', 'Bart', 'Paul']
        L[0:3]
        ['Adam', 'Lisa', 'Bart']
        L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。
        即索引0,1,2,正好是3个元素。
      
      如果第一个索引是0,还可以省略:
        L[:3]
        ['Adam', 'Lisa', 'Bart']
        切片操作还可以指定第三个参数:
          L[::2]
          ['Adam', 'Bart']
          第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,
          也就是隔一个取一个。
          把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple
      
      倒序切片
        对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:
          L = ['Adam', 'Lisa', 'Bart', 'Paul']
          L[-2:]
            ['Bart', 'Paul']
          L[:-2]
            ['Adam', 'Lisa']
          L[-3:-1]
            ['Lisa', 'Bart']
          L[-4:-1:2]
            ['Adam', 'Bart']
      对字符串切片
        字符串可以进行切片操作,只是操作结果仍是字符串。
          'ABCDEFG'[:3]
            'ABC'
          'ABCDEFG'[-3:]
            'EFG'
          'ABCDEFG'[::2]
            'ACEG'
      什么是迭代
        如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)
        因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。
     
      索引迭代
        Python中,迭代永远是取出元素本身,而非元素的索引。
        对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引
        方法是使用 enumerate() 函数:
        L = ['Adam', 'Lisa', 'Bart', 'Paul']
          for index, name in enumerate(L):
        print index,'_',name
          0 - Adam
          1 - Lisa
          2 - Bart
          3 - Paul
        
      迭代dict 的value
        dict 对象有一个values() 方法,这个方法把dict 转换成一个包含所有values 的list
        这样,我们迭代的就是 dict 的没一个value;
        d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
        print d.values()
        [85, 95, 59]
        还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样
        那这两个方法有何不同之处呢?
          1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
          2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,
          所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存
     
      迭代dict 的key 和value
        dict 对象的 items() 方法返回的值:
        d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
          print d.items()
        [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
        tems() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
          for key, value in d.items():
            print key, ':', value
              Lisa : 85
              Adam : 95
               Bart : 59
       生成列表
          要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):
            range(1, 11)
            [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
            但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:
            L = []
            for x in range(1, 11):
            L.append(x * x)
            [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
            [x * x for x in range(1, 11)]
            [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
        条件过滤
          如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
            [x * x for x in range(1, 11) if x % 2 == 0]
            [4, 16, 36, 64, 100]
          有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
        多层表达式
          对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:
            [m + n for m in 'ABC' for n in '123']
              ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
          翻译成循环代码就像下面这样:
            L = [] for m in 'ABC': for n in '123': L.append(m + n)
     

  • 相关阅读:
    (转)基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理
    (转)基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
    (转)基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度
    心得体悟帖---200301(因为别人或者别的事情,影响自己的心情,实在是太傻b了)
    心得体悟帖---200301(尽量把课程弄短,那样不良状态也可以录课)
    范仁义js课程---34、break和continue
    尚硅谷js---44、break和continue
    javascript疑难问题---5、javascript代码执行时间的计算
    范仁义js课程---33、打印99乘法表
    范仁义js课程---32、for循环嵌套
  • 原文地址:https://www.cnblogs.com/nmxs/p/8618392.html
Copyright © 2011-2022 走看看