如何写Python 第七课 列表型变量 列表方法 列表索引 --转载--玄魂工作室
前言:
在上一篇文章里,我们介绍了if语句、elif语句和else语句以及条件判断语句。我们今天来说点流程控制之外的东西:列表。列表型变量可以在变量下存储多个值,并以索引的方式来控制每个值。
Python的列表可以放下各种各样类型的值。无论那是字符、字符串或者是另外一个列表。
列表入门
通常来说,我们的一个变量只能对应一个值。但是列表型变量的出现可以让一个变量对应好多个值,具体的做法如下:
注意这里的格式。这‘多个值’(单词“Null”,一个连字符'-'和单词“Byte”)被放在方括号[]中间,用英文双引号括起,并用英文逗号进行分隔。变量test现在就自动成为了列表型变量。
索引
有些同学可能就会发问。一个变量对应多个值,那我们如何找到test变量下的每个具体的值?;很简单,列表型变量通过‘值’在列表中的位置进行定位。‘值在列表中的位置’就是索引。每个索引都指向唯一的一个值。索引从0开始计数,然后是1,2...这样。所以,test[0]对应着值“Null”,test[1]对应着值“-”,test[2]对应着值“Byte”。这样很符合常识。
我们可以对列表中的值进行操作,也可以把他们揉在一起操作:
好了,到目前为止,你应该知道什么叫做列表型变量,以及如何找到这个列表下面的每一个值。下面我们来引入一些基本的操作列表型变量的方法(method)。
操作列表型变量的一些方法(method)
如果你还记得那篇介绍string的文章,我相信你应该还记得什么叫做‘方法’。方法可以让我们轻松的完成一些任务。(有些老程序员经常告诫新手,不要重复造*,这里的*指的是别人写好的方法。试想,如果你想造一辆汽车,是直接调用别人做好的发动机简单呢,还是自己去炼钢设计发动机、制造发动机简单呢?‘方法’,就是别人造好的发动机,我们一调用,就能完成任务。当然,不是所有的人写的方法都很可靠,而且如果你有能力造出发动机,那说明你的水平的确很高,但是也会更浪费时间;而且也未必有别人写好的有效率。)
List类型对应的方法有很多,今天先简单介绍其中的三个:
.append()
.insert()
.remove()
.append()方法接收一个参数。它可以把接收到的参数放在列表的末尾。让我们把test列表赋值为空(这样方便观察),然后做实验
然后调用.append()的方法。注意这里的调用方式,我们可以直接在列表类型变量的后面加个点然后加上方法名就能调用了:
现在向列表里添加数字1和2.
记住,append()方法只会在列表末尾进行添加。通过参数被添加的值,会出现在原有值的后面。
那么我们如果不想把值添加到最后,而想把值插入到某个具体的位置,应该怎么办?
我们可以看到插入成功了。Insert方法接收两个参数,第一个参数是我们想要在列表的那个索引位置上进行插入,第二个是我们想要插入的值。我再次强调,列表的索引值是从0开始的
如果我们想从列表中删除某个值,可以使用remove方法,但是remove方法只能删除特定的值,却不能根据我们给定的索引进行删除。
我们可以看到当我们传入参数‘3’的时候,被删除的是索引位0上的值。
如果我们想删除特定索引位的值,可以使用del:
扩展:
这里是另外一篇介绍list的文章,写的很好:
http://www.cr173.com/html/19245_1.html
列表与字典(还没接触到)是Python中两个主要的数据类型。他们可以被修改,可以增长可以缩短,也可以嵌套。
列表 list
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。
Python 的列表与c语言中的数组访问方法相同,通过偏移地址访问。
下面举几个列表的例子,图片来自《Python学习手册(第三版)》
为了加速进度以及方便查询,我们看一下对列表常用操作的整理,图片来自《Python学习手册(第三版)》
现在我们详细讲一下几个list的操作。
首先我们明确,Python的list可以容纳任何对象。不管他是什么格式的。
1)创建list
创建列表的操作非常简单,只要用中括号报过一系列逗号分隔的值就可以了。就像第一个图片上那样。
2)list 切片
定义新列表后,我们可以列表中的任何一个部分作为新的列表,该技术在dive in python 中称为切片。
让我们直接看程序。
a_list =['a','b','c','d','e','f'] # 创建一个列表 print a_list[1:3] # 在屏幕上打印一个切片
值得注意的是,在list偏移访问中,与C中数组类似,同样用a_list[0]表示列表第一项。
上面的程序我们得到了如下的结果:
b c 分别是列表中第二,第三个元素,序号应该是1 和2 ,可以看出,对于 a_list[x,y] 的切片,切片片段为序号x到y-1之间的内容。
我们也可以截取半段,让我们看程序
# 位置 1 2 3 4 5 6
# 序号 0 1 2 3 4 5
a_list =['a','b','c','d','e','f'] # 定义 print a_list[:3] print a_list[3:]
从结果中我们可以看出,第一个片段[:3] 取的是从第一位到第三位的片段,而[3:] 获取的是从第四位,到结尾的片段。
无论列表多长[:n]片段中总含有n个元素。
如果将x,y都留空,那么程序将取列表内全部的元素,但是却获得了一个新的列表。
如果x , y中有负数怎么办,让我们来看一下
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list[-1:3] print a_list[3:-1]
第一个print输出了空的list, 第二个却输出了两个。 认真看我们可以看出,负数是指从右往左数,正数是指,从左往右。
3)向列表list中添加元素
从第三题中,我们认识到append可以向list中添加元素。
a_list.append('NEW')
让我们测试一下这句话.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.append('NEW') print a_list
字符串 NEW 已经被添加到该列表结尾处了.
当然除了append 这种只能在末尾添加 元素 的操作来说,我们还要插入操作
a_list.insert( n,35434)
insert 后面有两个操作符, 那么n表示插入哪个元素之后, 那串数表示插入什么东西,当然任何类型的都可以,让我们试一下这个新认识的方法.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.insert(2,'NEW') print a_list a_list.insert(6,43223452) print a_list
可以看到,插入位置是n号元素之前。
这两种操作都是单个元素插入,当我们需要将大量数据放在列表末尾的时候,我们就需要另一个新的方法了。
a_list.extend( [ 'fdaf',342 ] )
看一下例子就好了.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.extend( [ 'fdaf',342 ] ) print a_list
当然我们还有更简单的在末尾扩增list的方法.
+
没错,就是一个符号.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list+=[ 'fdaf',342 ] print a_list
看,我们得到了相同的结果!
4)在列表中查询
在C语言中,遍历数组什么的是常见的问题,我们需要知道,数组中有没有某个元素,某个元素在数组中的什么位置,某个元素在数组中出现的次数 等等等。这些也许在C中需要长篇累牍的描述算法,但是Python丰富的库资源已经把这些问题解决了。让我们看看下面的表吧:
a_list.count( 'NEW' ) #计算出现次数 a_list.index( 'NEW' ) #寻找第一次出现的位置 'NEW' in a_list #确认元素是否出现在list中
现在我们测试一下这几种功能。
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list.count( 'NEW' ) #计算出现次数 print 'NEW' in a_list #确认元素是否出现在list中
我们没有测试index,因为index 有个比较有趣的现象,让我们来试一下。
# 位置 1 2 3 4 5 6 7 # 序号 0 1 2 3 4 5 6 a_list =['a','b','c','d','e','f','NEW'] print a_list.index( 'NEW' )
list中存在NEW,返回了正确的值。如果没有NEW会怎么样的呢
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list.index( 'NEW' )
竟然提示错误,当然,这个就是引发了一个异常。之后我们会渐渐认识到这个做法的好处。
5)从列表中删除元素
既然我们插入了元素,那么我们也可以删除他,但是,元素的插入与删除并不像C语言那么麻烦,删除操作是如此的简单,大家看下例子就会了。
当我们知道元素的确切位置的时候,我们使用
del a_list[n]
当我们不知道位置,而是知道删除什么的时候,使用:
a_list.remove( )
与求元素准确位置一样,如果删除一个list中不存在的元素会引发程序错误。
最后我们确认一点,空列表的布尔值为False,其他的列表均为Ture。