1、切片

  有一个list—>L = [1,2,3,4,5,6,7]或tuple—>T = (1,2,3,4,5,6,7),如果想取得前三个元素,怎么操作?

  硬方法,也是低效的方法是:L= L[L[0], L[1], L[2]]。但是如果数量多,就算是用循环也很麻烦。但是Python提供了,Slice切片操作符。如下:

>>> L[0:3]
[1,2,3]

  L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。如果第一个索引是0,还可以省略,直接L[:3]。也可以从第三开始,取三个元素:L[2:5]。Python支持L[-1]取倒数第一个元素,同样支持切片。即是,Python支持由0开始从左到右,也可以从-1开始从右往左,做切片操作。

  通常一个切片操作要提供三个参数 [start_index:  stop_index:  step] 。其中,start_index是切片的起始位置;stop_index是切片的结束位置(但是不包括该索引的元素);step可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。

  当 step 是正数时,以list[start_index]元素位置开始(包括该位置元素), step作为步长到list[stop_index]元素位置(不包括该位置元素)为止,从左向右截取。这里面一个重点就是,要保证 list[stop_index]元素的逻辑位置必须在list[start_index]元素的逻辑位置右边,否则取不出元素。下面是一些合法的例子:

>>> L[1:5]
[2, 3, 4, 5] >>> L[1:-1] #-1代表的是元素7的位置
[2, 3, 4, 5, 6] >>> L[-5:-1]
[3, 4, 5, 6]

 >>> L[1:-2]
 [2, 3, 4, 5]

  下面是一些非法的例子:

>>> L[-1:-3]
[] >>> [-3:1]
File "<console>", line 1
[-3:1]
^
SyntaxError: invalid syntax

  下面是一些容易弄混的例子:

>>> L[-6:-1:1]          #start_index是-6,即数2,而stop_index是-1
[2, 3, 4, 5, 6]
>>> L[-1:-6:-1] #start_index是-1,即数7,而stop_index是-6
[7, 6, 5, 4, 3]
>>> L[-1:-6:1] #不合法,不符合逻辑从左到右
[] >>> L[-6:-1:2]
[2, 4, 6]
>>> L[-1:-6:-2]
[7, 5, 3]

  start_index和stop_index都是可以省略的,比如L[:]。被省略的默认由其对应左右边界起始元素开始截取:

>>> L[:]
[1, 2, 3, 4, 5, 6, 7]

 >>> L[:3]
 [1, 2, 3]

>>> L[:-1]
  [1, 2, 3, 4, 5, 6]

 >>> L[-5:]        #取最后五个数

 [3,4,5,6,7]

>>> L[-5::2]       #去最后五个数中的奇数
  [3, 5, 7]

  一些常用的切片操作,参考(https://blog.csdn.net/xpresslink/article/details/77727507):

# 取前一部分
>>> alist[:5]
[0, 1, 2, 3, 4] # 取后一部分
>>> alist[-5:]
[5, 6, 7, 8, 9] # 取偶数位置元素
>>> alist[::2]
[0, 2, 4, 6, 8] # 取奇数位置元素
>>> alist[1::2]
[1, 3, 5, 7, 9] # 浅复制,等价于list.copy()更加面向对象的写法
>>> blist = alist[:]
>>> blist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 返回一个逆序列表,推荐reversed(list)的写法,更直观易懂。
>>> alist[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # 在某个位置插入多个元素
>>> alist[3:3] = ['a','b','c']
>>> alist
[0, 1, 2, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9] # 在开始位置之前插入多个元素
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:0] = ['a','b','c']
>>> alist
['a', 'b', 'c', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 替换多个元素
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[0:3] = ['a','b','c']
>>> alist
['a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9] # 删除切片
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del alist[3:6]
>>> alist
[0, 1, 2, 6, 7, 8, 9]

  切片练习题,https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431756919644a792ee4ead724ef7afab3f7f771b04f5000#0

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-05-22 19:13:58
# @Author : Chen Jing (cjvaely@foxmail.com)
# @Link : https://github.com/Cjvaely
# @Version : $Id$ # 切片Slice练习
# 利用切片操作,实现一个trim()函数,
# 去除字符串首尾的空格,注意不要调用str的strip()方法 def trim(s):
if s[:1] == ' ':
return trim(s[1:])
elif s[-1:] == ' ':
return trim(s[:-1])
else:
return s # 测试:
if trim('hello ') != 'hello':
print('测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim(' ') != '':
print('测试失败!')
else:
print('测试成功!')

最新文章

  1. 美团HD(2)-设置导航栏内容
  2. LogStash-2.4.0自定义区域信息插件-ISP
  3. Python模块和包
  4. String类中的一些函数使用方法
  5. hbm配置文件 generator节点各种解释
  6. 【过程改进】10分钟进阶Nuget
  7. asynchronous-logging-with-log4j-2--转
  8. &lt;&lt; 移位运算
  9. [转载]大道至简!!!从SAP HANA作为SAP加速器的方式,看ERP on HANA的春天
  10. 解决jquery和其他库的冲突
  11. 【线段树】【3-21个人赛】【同样的problemB】
  12. MUI 列表页面绑定接口数据
  13. aes 128、192、256位,cbc、cfb、ecb、ofb、pcbc加密解密
  14. Ubuntu 下重启网络的方法
  15. vim详解
  16. Centos 7 虚拟机挂载U盘
  17. leetcode每日刷题计划-简单篇day7
  18. No module named scrapy 成功安装scrapy,却无法import的解决方法
  19. Hbase shell 常用命令(1)
  20. Bitmap Images and Image Masks

热门文章

  1. jar包冲突问题
  2. PHP命名大小写敏感规则
  3. js异步加载和按需加载
  4. 076 Minimum Window Substring 最小窗口子字符串
  5. MS SqlServer之Exec和EXEC SP_EXECUTESQL
  6. 将JWT与Spring Security OAuth结合使用
  7. Java中常见的坑
  8. c#进行MD5加密方式和解密算法
  9. spring data jpa自定义baseRepository
  10. cocos的Director、Scence、Layer(一)---摘自于官方文档