Python学习入门基础教程(learning Python)--6.3 Python的list切片高级
上节"6.2 Python的list访问索引和切片"主要学习了Python下的List的访问技术:索引和切片的基础知识,这节将就List的索引index和切片Slice知识点做进一步的展开。
0.index必须大于0么?
list数据类型通过index访问某项数据项时,其index的值可以取负值,-1代表list列表最后一项数据,-2代表倒数第二项数据,以此类推。
>>> li1 = range(10)
>>> li1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> li1[-1]
9
>>> li1[0:-2]
[0, 1, 2, 3, 4, 5, 6, 7]
>>> li1[-len(li1):-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
1.slice步长
Python里的List数据类型在使用的时候,通常给出start和stop位置,比较常见。实际上List的Slice的标准语法规则应该是:
list_obj[start:stop:step]
这里的step是步长的意思。上边的意思是从start位置开始取数据,一直到stop-1这个位置结束,每隔step个数据项取一个数据。如果不指定step值,Python一般默认为+1。
>>> li1 = range(50)
>>> li1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
>>> li2 = li1[::5]
>>> li2
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
>>> li3 = li1[4:49:3]
>>> li3
[4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46]
>>>
上边代码第4行,li2列表的数据项是从li1里取得,以什么样的方式从li1里取呢?从li1的第0项数据开始一直到li1的最后一项结束,是全部都取回么?不是,从第0项开始,每隔5项数据取一个,所以取回的是0、5、10...45。代码第7行是从li1的第4项数据开始取数据,每隔3项数据取一个数据,所以依次取回第4项、第7项、第10项等数据。
>>> li4 = li1[4:49:-3]
>>> li4
[]
2.步长一定是正数么?
我们看下边的例子
>>> li1 = range(50)
>>> li4 = li1[4:49:-3]
>>> li4
[]
>>> li4 = li1[4:49:3]
>>> li4
[4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46]
>>> li4 = li1[49:4:-3]
>>> li4
[49, 46, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7]
>>>
例子说明,step也可以为负数,上边例子比较纠结的地方是代码第2行为何没有数据取回赋值给li4?其实很简单,在取li1时,限定了范围从li1列表的第4项开始取数据,到第48项数据结束,由于step=-3,那取回第一个数据应该是第4-3项数据即li1的第1项数据,但第1项数据不在4:49这个限定范围内,故无法取回数据并赋值给li4,故li4为空列表。理解了第2行的代码后再去理解第7行的代码就容易的多了,第7行的代码的意思从li1的第49项开始取数据,第二次去第49-3=46项的数据,一直取到第4-1=3项数据之间的所有满足条件的数据并赋值给li4。
3.list逆序
通过以上对list的start、stop和step的介绍,我们发现list太牛了!可以很轻松的使用list数据类型来完成C语言比较复杂的程序,例如用C语言实现对一个字符串数组的逆序操作,写出这个程序很复杂,如果用Python的list来实现一两行即可搞定!
>>> str1 = "www.jeapedu.com"
>>> li1 = list(str1)
>>> li1
['w', 'w', 'w', '.', 'j', 'e', 'a', 'p', 'e', 'd', 'u', '.', 'c', 'o', 'm']
>>> li2 = li1[-len(li1):-1]
>>> li2
['w', 'w', 'w', '.', 'j', 'e', 'a', 'p', 'e', 'd', 'u', '.', 'c', 'o']
>>> li3 = li1[-1:-len(li1)]
>>> li3
[]
>>> li3 = li1[-1:-len(li1):-1]
>>> li3
['m', 'o', 'c', '.', 'u', 'd', 'e', 'p', 'a', 'e', 'j', '.', 'w', 'w']
>>>
注:step默认情况下为1,len()函数可以测得list数据类型的长度,list()函数可将字符串专为list列表。
解释一下上边的小程序,代码第2行将str1字符串转换成list列表,并赋值给li1列表,代码第8行的li3为何没有数据呢?因为默认的step=1,在最后一项数据到第一项数据间这个访问内,从list的-1开始每隔1个已经超出了这个访问,故无法取得任何li1的数据项赋值给li3,而代码第11行去li1的范围为从最后一项(-1)开始,每隔负1项(-2、-3、-4...)都在-1到-len(li1)这个范围之内,故可以取回li1的数据项,由于步长绝对值为1,又是从li1最后一项开始取一直取到li1的第0项数据,故此时li3列表是li1列表的逆序列表。
有牛人说了,你上边的Python程序也太复杂了,Python有更简单的办法实现list的逆序,那就是直接调用Python提供的内建函数reverse(),恩,对!用reverse函数确实更简单!
>>> li5
['m', 'o', 'c', '.', 'u', 'd', 'e', 'p', 'a', 'e', 'j', '.', 'w', 'w', 'w']
>>> li5.reverse()
>>> li5
['w', 'w', 'w', '.', 'j', 'e', 'a', 'p', 'e', 'd', 'u', '.', 'c', 'o', 'm']
>>>
学Python吧!太强大了!
--->
Python学习入门基础教程(learning Python)--6.3 Python的list切片高级的更多相关文章
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
		
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
 - Python学习入门基础教程(learning Python)--5.3 Python写文件基础
		
前边我们学习了一下Python下如何读取一个文件的基本操作,学会了read和readline两个函数,本节我们学习一下Python下写文件的基本操作方法. 这里仍然是举例来说明如何写文件.例子的功能是 ...
 - Python学习入门基础教程(learning Python)--3.3.3 Python逻辑关系表达式
		
在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...
 - Python学习入门基础教程(learning Python)--3.3.2 Python的关系运算
		
如果if的condition不用布尔表达式来做条件判断而采用关系表达式,实际上关系表达式运算的结果要么是True要么是False.下面我们先了解一些有关关系运算符的基础知识,如下表所示. 做个小程序测 ...
 - Python学习入门基础教程(learning Python)--5.1 Python下文件处理基本过程
		
Python下的文件读写操作过程和其他高级语言如C语言的操作过程基本一致,都要经历以下几个基本过程. 1. 打开文件 首先是要打开文件,打开文件的主要目的是为了建立程序和文件之间的联系.按程序访问文件 ...
 - Python学习入门基础教程(learning Python)--5.2 Python读文件基础
		
上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...
 - Python学习入门基础教程(learning Python)--5 Python文件处理
		
本节主要讨论Python下的文件操作技术. 首先,要明白为何要学习或者说关系文件操作这件事?其实道理很简单,Python程序运行时,数据是存放在RAM里的,当Python程序运行结束后数据从RAM被清 ...
 - Python学习入门基础教程(learning Python)--8.3 字典常用的方法函数介绍
		
本节的主要讨论内容是有关dict字典的一些常用的方法函数的使用和范例展示. 1. clear清除字典数据 语法结构如下: dict_obj.clear() 示例代码如下: dict1 = {'web' ...
 - Python学习入门基础教程(learning Python)--2.2 Python下的变量基础
		
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的价 ...
 
随机推荐
- Cocos2d-x 3.0 编译出错 解决 error: expected ';' at end of member declaration
			
近期把项目移植到cocos2d-x 3.0,在整Android编译环境的时候,出现一大堆的编译出错,都是类似"error: expected ';' at end of member dec ...
 - 怎样选择PHP的版本
			
原文:怎样选择PHP的版本 IIS 如果想使用IIS配置PHP的话,那么需要选择Non-Thread Safe(NTS)版本的PHP Apache 如果你是用的Apache的版本来自Apache Lo ...
 - CentOS 使用yum命令安装Java SDK(openjdk)
			
CentOS 6.X 和 5.X 自带有OpenJDK runtime environment (openjdk).它是一个在linux上实现开源的java 平台.CentOS yum 命令 安装 ...
 - ASP.NET Web Service中使用Session 及 Session丢失解决方法 续
			
原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...
 - Codeforces 474A Keyboard (水
			
题目链接:点击打开链接 键盘移位了,问输出相应的字母 #include <cstdio> #include <cstring> char a[105]; char b[3][1 ...
 - 探讨css中repaint和reflow
			
(个人blog迁移文章.) 前言: 页面设计中,不可避免的需要浏览器进行repaint和reflow.那到底什么是repaint和reflow呢.下面谈谈自己对repaint和reflow的理解,以及 ...
 - CSS3 Media Queries 详细介绍与使用方法
			
Media Queries 就是要在支援CSS3 的浏览器中才能正常工作,IE8 以下不支持. 而Media Queries 的套用方法千变万化,要套用在什么样的装置中,都可以自己来定义. 到底什么是 ...
 - 机器学习学习-Types of learning
			
Types of learning 基于个人理解.于我们在面对一个详细的问题时.可以依据要达到的目标选择合适的机器学习算法来得到想要的结果.比方,推断一封电子邮件是否是垃圾邮件,就要使用分类(clas ...
 - Gimp教程:简约手机图标风格
			
效果: 在一个国外博客上翻到的图标制作教程,效果类似于Cowon J3的默认图标风格. 制作过程很简单,只需两三步,不多说了,上步骤 Step1.新建50×50的黑色背景 Step2.新建 ...
 - js 文字预写匹配
			
效果图: demo如下: <!DOCTYPE html> <html> <head> <title>文字预写</title> </he ...