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('测试成功!')

【Python学习之五】高级特性1(切片、迭代、列表生成器、生成器、迭代器)的更多相关文章

  1. python高级特性:切片/迭代/列表生成式/生成器

    廖雪峰老师的教程上学来的,地址:python高级特性 下面以几个具体示例演示用法: 一.切片 1.1 利用切片实现trim def trim(s): while s[:1] == " &qu ...

  2. Python学习之高级特性

    切片 在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取.这种方法可以帮助我们依次获取我们想要 ...

  3. python学习之高级特性:

    切片:对列表.元组.字符串.字典取中间的一部分,在C中一般是通过for循环拷贝/memcpy/strcat等操作.而python提供了更方便的切片操作符[m:n]:前闭后开,如果从0取m可以省略:如果 ...

  4. Python学习 Day 4 函数 切片 迭代 列表生成式 生成器

    定义函数 def my_abs(x):#求绝对值的my_abs函数 if x >= 0: return x else: return –x def nop():#空函数 pass#占位符 参数检 ...

  5. Python的高级特性(切片,迭代,生成器,迭代器)

    掌握了python的数据类型,语句和函数,基本上就可以编出很多有用的程序了. 但是在python中,并不是代码越多越好,代码不是越复杂越好,而是越简单越好. 基于这个思想,就引申出python的一些高 ...

  6. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  7. Python进阶:全面解读高级特性之切片!

    导读:切片系列文章连续写了三篇,本文是对它们做的汇总.为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔 ...

  8. Python:笔记(4)——高级特性

    Python:笔记(4)——高级特性 切片 取一个list或tuple的部分元素是非常常见的操作.Python提供了切片操作符,来完成部分元素的选取 除了上例简单的下标范围取元素外,Python还支持 ...

  9. Python面向对象编程高级特性

    ***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制 ...

  10. Python的一些高级特性

    内容基本上来自于廖雪峰老师的blog相当于自己手打了一遍,加强加强理解吧. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493 ...

随机推荐

  1. Sicily 1027. MJ, Nowhere to Hide

    //就是一个简单的字符串配对~~用map来解决很easy #include <iostream> #include <map> #include <string> ...

  2. Codeforces Round #562 (Div. 2) B. Pairs

    链接:https://codeforces.com/contest/1169/problem/B 题意: Toad Ivan has mm pairs of integers, each intege ...

  3. 5. 把一幅彩色图像的H、S、I分量单独显示。

    #include <cv.h> #include <highgui.h> # include <math.h> #define M_PI 3.1415 void R ...

  4. setTimout( , 0) 详解

    setTimout( , 0) 一.前言 前端工程师们工作久了,一般都会在某些地方看见过这样的代码: setTimeout(function(){ // TODO }, 0); 举个实例,移动端我们经 ...

  5. TestNG ABC

    TestNG ABC 资源 官网 :http://testng.org/doc/index.html Maven示例 <dependency>             <groupI ...

  6. Java实现多线程下载 URL以及URLConnection

    主线程: public class MultiThreadDown { public static void main(String[] args) throws Exception{ //初始化Do ...

  7. Mind must be master of the body, strong mind can separate the body from its suffering.

    Mind must be master of the body, strong mind can separate the body from its suffering.意志是身体的主人,有顽强的意 ...

  8. ionic 2 起航 控件的使用 客户列表场景(二)

    首先放出我hithub项目代码例子,有兴趣研究探讨的同学可以去看看 https://github.com/linyuebin2016/ionic2.git 下面我们来尝试下第一个项目场景 一份客户的列 ...

  9. pt-table-checksum和pt-table-sync

    环境:系统bsd,标准安装,ports安装的mysql. 主172.16.21.126 从172.16.21.128vi /etc/rc.conf 添加 mysql_enable="YES& ...

  10. POJ Charm Bracelet 挑饰品 (常规01背包)

    问题:去珠宝店抢饰品,给出饰品种数n,能带走的重量m,以及每种饰品的重量w与价值v.求能带走的最大量. 思路:常规01背包. #include <iostream> using names ...