博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础编程(第2版)(第二章)
阅读量:6076 次
发布时间:2019-06-20

本文共 4503 字,大约阅读时间需要 15 分钟。

hot3.png

不管什么原因,第一章和第二章间隔有点长,坚持

第二章 列表和元组

2.1 序列概念

本章重点讨论最常用的两种类型:列表和元组(列表和元组主要区别是,列表可以修改,元组则不能。)

列表的各个元素通过逗号分隔,写在方括号中(如下:)

>>> list = ['test1','test2']

列表也可以包含其他列表,举例构建一个人员信息的列表也是可以的,这个列表就是你的数据库:(如下)

>>> a = ['lizi',29]>>> b = ['taozi',20]>>> c = [a,b]>>> c[['lizi', 29], ['taozi', 20]]

2.2 通用序列操作

所有序列类型都可以进行某些特定操作。这些操作包含:索引(indexing)、分片、加、乘以及检查某个元素是否属于序列成员。初次之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。

2.2.1 索引

序列中所有元素都是有编号的----从0开始递增。

>>> name = gengjikun>>> name[0]>>> 'g'>>> name[-1]>>> 'n'

注意:字符串就是一个由字符组成的序列。索引0指向第1个元素。


这就是索引。可以通过索引获取元素。所有序列都是可以通过这种方式进行索引。使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。最后1个元素的位置编号为-1(不是-0,因为那会和第1个元素重合)

字符串字面值能够直接使用索引,不需要一个变量引用他们。两种做法的效果是一样的。

>>> 'Hello'[1]>>> 'e'

还可以这样:

>>> fourth = raw_input("Year:")[3]Year:2016>>> fourth'6'

2.2.2 分片

与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。分片通过冒号相隔的两个索引来实现:

>>> tag = '
Python web site'>>> tag'
Python web site'>>> tag[8:31]'"http://www.python.org"'>>> tag[9:30]'http://www.python.org'>>> tag[32:-4]'Python web site'

分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。

>>> numbers = [1,2,3,4,5,6,7,8,9,10]>>> numbers[0:1][1]

假设需要访问最后3个元素,那么当然可以进行显式的操作:

>>> numbers[7:10][8, 9, 10]

索引10指向的是第11个元素——这个元素并不存在,却是在最后一个元素之后。

如下做法是可行的,但如果需要从别表结尾开始计数呢

>>> numbers[-3:-1][8, 9]>>> numbers[-1:-3][]>>> numbers[-3:0][]

这并不是我们所要的结果。实际上,只要分片中最左边的索引比它右边的晚出现在序列中,如果分片所得到的部分包括序列结尾的元素,那么,只需置空最后一个索引即可:

>>> numbers[-3:][8, 9, 10]

这样的方法同样适用于序列开始的元素:

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

实际上,如果需要复制整个序列,可以将两个索引置空:

>>> numbers[:][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

分片实例:

#coding:utf-8#对http://www.something.com形式的URL进行分割url = raw_input('Please enter the URL:')domain = url[11:-4]print "Domain name:f" + domainRunning script: "E:\pylist\list.py"Please enter the URL:http://www.python.orgDomain name:python

2. 更大的步长

分片的时候,分片的开始和结束需要指定。而另外一个参数是步长——通常都是隐式设置的。在普通的分片中,步长是1——分片操作就是按照这个步长  逐个遍历序列的元素,然后返回开始和结束点之间的所有元素。

>>> numbers = [1,2,3,4,5,6,7,8,9,10]>>> numbers[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> numbers[0:10][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> numbers[0:10:1][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

步长为2的分片包括的是从开始到结束每个1个的元素。

>>> numbers[0:10:2][1, 3, 5, 7, 9]>>> numbers[::4][1, 5, 9]

之前提及的捷径也可以使用。如果需要将每4个元素的第1个提取出来,那么只要将步长设置为4即可(以上)

当然步长不能为0——那不会执行——但步长可以是负数,即从右到左提取元素:

>>> numbers[8:3:-1][9, 8, 7, 6, 5]>>> numbers[::-1][10, 9, 8, 7, 6, 5, 4, 3, 2, 1]>>> numbers[::-2][10, 8, 6, 4, 2]>>> numbers[::-4][10, 6, 2]

2.2.3 序列相加

通过使用加号就可以进行序列的连接操作:

>>> [1,2,3] + [4,5,6][1, 2, 3, 4, 5, 6]>>> 'Hello,' + 'world!''Hello,world!'>>> [1,2,3] + 'world!'Traceback (most recent call last):  File "
", line 1, in 
TypeError: can only concatenate list (not "str") to list

以上正如错误信息所提示的,列表和字符串是无法连接在一起的,尽管他们都是序列。简单地说,两种相同类型的序列才能进行连接操作。

2.2.4 乘法

用数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重置x次。

>>> 'Python' * 5'PythonPythonPythonPythonPython'>>> [42] * 10[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

None、空列表和初始化

None是Python的内建值

[]空列表

初始化一个长度为10的列表:

>>> sequence = [None] * 10>>> sequence[None, None, None, None, None, None, None, None, None, None]

2.2.5 成员资格

为了检查一个值是否在序列中,可以使用in运算符。

>>> permissions = 'rw'>>> 'w' in permissionsTrue>>> 'x' in permissionsFalse>>> users = ['mlh','foo','bar']>>> raw_input('Enter your user name:') in usersEnter your user name:mlhTrue>>> subject = '$$$ Get rich now!!! $$$'>>> '$$$' in subjectTrue

2.2.6  长度、最小值和最大值

内建函数len、min和max非常有用。len函数返回序列中所包含元素的数量,min函数和max函数分别返回序列中最大和最小的元素。

>>> numbers = [100,34,678]>>> numbers[100, 34, 678]>>> len(numbers)3>>> max(numbers)678>>> min(numbers)34>>> max(2,3)3>>> min(9,3,2,5)2

根据以上我们可以很容易理解例子中各个操作 是如何实现的,除了最后两个表达式可能会让人有些迷惑。在这里,max函数和min函数的参数不是一个序列,而是以多个数字直接作为参数。

2.3 列表:Python的'苦力'

列表是可变的——可以改变列表的内容

2.3.1 list函数

>>> list('Hello')['H', 'e', 'l', 'l', 'o']

注意:list函数适用于所有类型的序列,而不只是字符串。

2.3.2 基本的列表操作

改变列表方法:元素赋值、元素删除、分片赋值以及列表方法(不是所有的列表方法都真正地改变列表)。

1、改变列表:元素赋值

>>> x = [1,1,1,]>>> x[1] = 2>>> x[1, 2, 1]

2、删除元素

从列表删除元素使用del语句

>>> names = [1,2,3,4,5,6]>>> del names[0]>>> names[2, 3, 4, 5, 6]

3、分片赋值

分片是一个非常强大的特性,分片赋值操作则更加显现它的强大。

>>> name = list('jikun')>>> name['j', 'i', 'k', 'u', 'n']>>> name[2:]['k', 'u', 'n']>>> name[2:] = list('car')>>> name['j', 'i', 'c', 'a', 'r']

可以使用与原序列不等长的序列将分片替换:

>>> name = list('jikun')>>> name[1:]['i', 'k', 'u', 'n']>>> name[1:] = list('ar')>>> name['j', 'a', 'r']>>> name[1:] = list('ikunshishen')>>> name['j', 'i', 'k', 'u', 'n', 's', 'h', 'i', 's', 'h', 'e', 'n']

分片赋值语句可以在不需要替换任何原有元素情况下插入新的元素:

>>> numbers = [1,5]>>> numbers[1:2][5]>>> numbers[1:1][]>>> numbers[1:1] = [2,3,4]>>> numbers[1, 2, 3, 4, 5]

还可以通过分片赋值来删除元素:

转载于:https://my.oschina.net/kaixin603/blog/640231

你可能感兴趣的文章
JAVA通信编程(一)——串口通讯
查看>>
天翼杯大数据算法应用大赛
查看>>
我的2008
查看>>
2015年05月18日面试总结
查看>>
病毒纷纭 云安全曲线救网
查看>>
从与星瑞格软件的合作看浪潮深化主机生态布局
查看>>
中国人工智能学会通讯——当巧妇遇到“大米”——机器翻译启示录
查看>>
享未来就现在 聚VR一体机春天已经到来
查看>>
针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
查看>>
政府拥抱大数据 治理迎来新格局
查看>>
零件检测如何保证出色的质量 光切传感器成为理想替代方案
查看>>
“大声bb”–攻击Linux和FreeBSD的恶意软件
查看>>
绿盟科技发布2014互联网金融安全报告
查看>>
《计算机视觉:模型、学习和推理》一2.7 期望
查看>>
立志让国内用户不再依赖国外DLP技术 天空卫士发布UCS新品
查看>>
浪潮M5设计解读:打破通用均衡,聚焦场景极致
查看>>
使用Apache Spark和MySQL打造强大的数据分析
查看>>
2016年全球10大数据中心提供商概览
查看>>
这就是我喜欢 Bootstrap的五个原因
查看>>
主流服务器虚拟化产品中的优势与短板概述
查看>>