2.1序列概览
列表和元组的主要区别在于,列表可以修改,元组则不能。也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适。使用后者的理由通常是技术性的,它与Python内部的运作方式有关。这也是内建函数可能返回元组的原因。一般来说,在几乎所有的情况下列表都可以替代元组。
编写一个列表:
>>> edward=['Edward Gumby',42]
构建如下的一个人员信息的列表也是可以的,这个列表就是你的数据库:
>>> john=['John Simith',50]
>>> database=[edward,john]
>>> database
[['Edward Gumby', 42], ['John Simith', 50]]
2.2通用序列操作
所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(sliceing) ,加(adding )、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
2.2.1索引
序列中的所有元素都是有编号的—从0开始递增。这些元素可以通过编号分别访问:
>>> greeting='Hello'
>>> greeting[0]
'H'
字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引,而不需要一个变量引用他们。
>>> 'Hello'[1]
'e'
如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。
>>> fourth=raw_input('Year:')[3]
Year: 2025
>>> fourth
'5'
实例:
#根据给定的年月日以数字形式打印出日期
>>> months=[
'January',
'February',
"March",
'April',
'May',
'June',
'July',
'Augest',
'September',
'October',
'November',
'December'
]
#以1一31的数字作为结尾的列表
endings=['st','nd','rd']+17*['th']\
+['st','nd','rd']+7*['th']\
+['st']
year=raw_input('Year:')
month=raw_input('Month(1-12:')
day=raw_input('Day(1-31):')
month_number=int(month)
day_number=int(day)
#要将月份和天数减1,以获得正确的索引
month_name=months[month_number-1]
ordinal=day+endings[day_number-1]
print month_name+''+ordinal+''+year
Year: 2015
Month(1-12:>? 5
Day(1-31):>? 13
May13th2015
2.2.2分片
与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。
>>> tag='https://d396qusza40orc.cloudfront.net/statistics'
>>> tag[23:37]
'cloudfront.net'
分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是需要提取部分的第1个元素的编号,而最后的索引则是分片之后剩下部分的第1个元素的编号:
>>> numbers=[1,2,3,4,5,6,7,8,9]
>>> numbers[3:6]
[4, 5, 6]
简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。
1.优雅的捷径
假设需要访问最后3个元素(根据先前的例子),那么当然可以进行显式的操作:
如果分片所得部分包括序列结尾的元素,那么,只需置空最后一个索引即可:
>>> numbers[-3:]
[7, 8, 9]
这种方法同样适用于序列开始的元素:
>>>numbers[:3]
[1,2,3]