Python列表和元组

概述

在Python中,最基本的数据结构是序列。序列中每个元素被分配一个序号–即元素的位置,也称为索引。第一个索引是0,第二个是1,以此类推。

序列概览

Python包含6种内建的序列,本章重点讨论最常用的两种类型:列表和元组。其他的内建序列类型有字符串、Unicode字符串、buffer对象和xrange对象。
列表和元组的主要区别在于,列表可以修改,元组则不能。
一般来说,在自己编写的程序中,几乎在所有的情况下都可以用列表替代元组。
可以用序列表示数据库中一个人的信息一一第1个元素是姓名,第2个元素是年龄。根据上述内容编写一个列表(列表的各个元素通过逗号分隔,写在方括号中),如下列所示:

edward = ['Edward Gumby', 42]

同时,序列也可以包含其他的序列,因此,构建如下一个人员信息的列表也是可以的,这个列表就是你的数据库:

edward = ['Edward Gumby', 42]
print(edward)
['Edward Gumby', 42]
john = ['John Smith', 50]
database = [edward, john]
print(database)
[['Edward Gumby', 42], ['John Smith', 50]]

通用序列操作

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

索引

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

greeting = 'hello'
greeting[0]
'h'

这就是索引。可以通过索引获取元素。索引序列都可以通过这种方式进行索引。使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。最后一个元素的位置编号时-1。

分片

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

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

分片操作对于提取序列的一部分时很有用的。而编号在这里显得尤为重要。第一个索引时要提取的第一个元素的编号,而最后的索引则是分片之后剩余部分的第一个元素的编号。因此分片符合是前闭后开的,简而言之,分片操作的实现需要提供两个索引作为边界,第一个索引的元素是包含在分片内的,而第二个则不包含在分片内。
如果分片所得部分包含序列结尾的元素,那么只需要置空最后一个索引即可:

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

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

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

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

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

更大的步长

进行分片的时候,分片的开始和结束点需要进行指定(不管是直接还是间接)。而另外一个参数(在python2.3加入到内建类型)一一步长(step length)一一通常都是隐式设置的。在普通的分片中,步长是1一一分片操作就是按照这个步长逐步遍历序列的元素,然后返回开始和结束点之间的所有元素。

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

如果步长被设置为比1大的数,那么就会跳过某些元素。例如,步长为2的分片包括的是从开始到结束每隔1隔的元素。

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

步长可以为负数,此时分片从右到左提取元素:

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

对于一个正数步长,Python会从序列的头部开始向右提取元素,直到最后一个元素;而对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。

序列相加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值