加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python 基础 切片 迭代 列表生成式

发布时间:2020-12-17 00:24:38 所属栏目:Python 来源:网络整理
导读:对list 进行切片 如列表 L = ['Adam','Lisa','Bart','Paul'] L[0:3] ['Adam','Bart'] L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。 即索引0,1,2,正好是3个元素。 如果第一个索引是0,还可以省略: L[:3] ['Adam','Bart'] 切片操作还可以指
对list 进行切片
  如列表
    L = ['Adam','Lisa','Bart','Paul']
    L[0:3]
    ['Adam','Bart']
    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。
    即索引0,1,2,正好是3个元素。
  
  如果第一个索引是0,还可以省略:
    L[:3]
    ['Adam','Bart']
    切片操作还可以指定第三个参数:
      L[::2]
      ['Adam','Bart']
      第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,
      也就是隔一个取一个。
      把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple
  
  倒序切片
    对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:
      L = ['Adam','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','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,'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,10]
        但如果要生成[1x1,2x2,3x3,...,10x10]怎么做?方法一是循环:
        L = []
        for x in range(1,11):
        L.append(x * x)
        [1,16,25,36,49,64,81,100]
        [x * x for x in range(1,11)]
        [1,100]
    条件过滤
      如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
        [x * x for x in range(1,11) if x % 2 == 0]
        [4,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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读