python实验报告二_【Python基础教程】阅读&实验报告〖二〗(上)

第二章 列表和元组(上)

【数据结构】是通过某种方式(例如对元素进行编号)组织在一起的【数据元素的集合】,这些数据元素可以是数字或者字符,甚至可以是其他的数据结构。

在python中,最基本的数据结构是【序列】。

序列中的每个元素被分配一个序号——即元素的位置,也称为【索引】。

p.s.概念介绍完之后再往下看就会忘掉,为了防止这种情况,我会在这些概念后面用括号把概念的意思标注出来,直到熟悉到不需要了为止。

2.1序列概览

Python中包含六种内建的序列(最基本的数据结构),本章重点讨论两种:【列表】和【元组】,其他的内建序列(最基本的数据结构)有【字符串】、【Unicode字符串】、【buffer对象】、【xrange对象】。

图1.六种内建序列。

列表和元组的区别在于,列表(序列的一种)可以修改,元组(序列的一种)不能修改。

在需要操作一组数值的时候,序列很好用。

例:用序列表示数据库中一个人的信息,第一个元素是姓名,第二个元素是年龄。图2.根据上述内容编写的【列表】,各个元素通过逗号分隔,写在方括号中。

序列也可以包含其他序列。图3.构建一个人员信息列表:database。

序列中每一个元素都有自己的编号,即【索引】。图4.根据序号查询database中的信息。

p.s.python还有一种名为容器的数据结构。容器是包含其他对象的任意对象。序列(列表和元组)和映射(字典)是两类主要的容器(数据结构)。

2.2通用序列操作

所有序列(最基本的数据结构)类型都可以进行某些特定的操作。

图5.六种通用序列操作。

2.2.1索引

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

所有序列都可以通过这种方式进行索引。

使用负数时,python会从最右边开始计数最后一个元素的编号是-1。

以上内容见图4。

字符串字面值能够直接使用索引,而不需要一个变量引用它们。图6.以上两种方法效果一样。

如果一个函数调用返回一个序列,那么可以直接对返回结构进行索引操作。

例:如果只对用户输入年份的额最后一位感兴趣,那么可以进行如下操作。图7.有索引和没有的区别。

代码清单2-1 索引示例

# -*- coding: utf-8 -*-

#代码清单2.1 索引示例

#根据给定的年月日以数字形式打印出日期

months=['January','February','March','April','May','June','July','August','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图8.代码清单2-1运行结果。

2.2.2分片

分片操作访问一定范围内的元素。

分片通过冒号隔开两个索引来实现。图9.分片示例1。图10.分片示例2。

第1个索引的元素包含再分片内,第2个不包含在分片内。

1.优雅的捷径

例:假设需要访问最后3个元素,那么可以进行显式操作。图11.访问最后3个元素,第二个索引值可以是不存在的元素。

例:如果想要从列表的结尾开始计数。图12.从结尾开始计数,第二个索引值置空。图13.其他索引用法。

总结:

1.访问后n个元素,第二个值可以置空。

2.访问后n个元素,第二个值可以是不存在的值。

3.访问前n个元素,第一个值可以置空。

4.复制整个序列,两个值都置空。

代码清单2-2 分片示例

# -*- coding: utf-8 -*-

#对http://www.something.com形式的URL进行分割

url=raw_input('Please enter the URL:')

domain=url[11:-4]

print "Domain name:"+domain图14.代码清单2-2运行结果。

2.更大的步长

进行分片的时候,除了开始和结束的点需要指定,还有一个参数是隐式的,那就是步长。图15.步长不能取0。图16.步长取负数的时候,开始的值和结束的值互换。

总结:

1.步长不能为0。

2.步长可以为负数,此时从右到左提取元素。

2.2.3序列相加

列表和字符串是无法连接到一起的,尽管他们都是序列。

两种同类型的序列才能进行连接操作。图17.序列相加。

2.2.4乘法图18.字符串和列表的乘法。

None、空列表和初始化图19.[ ]和[None]。

空列表可以简单地通过两个括号进行表示。

None是Python的一个内建值,表示什么都没有,利用None可以初始化一个只有长度没有内容的列表。

代码清单2-3 序列(字符串)乘法示例

#以正确的宽度在居中的“盒子”里打印一个句子

#注意,整数除法运算符(//)只能用在Python2.2以及后续版本,在之前的版本中,只使用普通除法(/)

sentence=raw_input("Sentence:")

screen_width=80

text_width=len(sentence)

box_width=text_width+6

left_margin=(screen_width-box_width)//2

print

print ' '*left_margin+"+" +"-"*(box_width-2)+"+"

print ' '*(left_margin+2)+"|"+" "*text_width +"|"

print ' '*(left_margin+2)+"|"+ sentence +"|"

print ' '*(left_margin+2)+"|"+" "*text_width +"|"

print ' '*left_margin+"+" +"-"*(box_width-2)+"+"图20.代码清单2-3运行结果。

2.2.5成员资格

为了检查一个成员是否在序列中,可以使用in运算符。图21.字符串成员资格。图22.序列成员资格。

代码清单2-4 序列成员资格示例

#检查用户名和PIN码

database=[['albert','1234'],['dilbert','4242'],['smith','7524'],['jones','9843']]

username=raw_input("User name:")

pin=raw_input("PIN code:")

if[username,pin]in database:print 'Access granted'

if[username,pin]not in database:print 'Error'图23.代码清单2-4运行结果。

2.2.6长度、最小值和最大值图24.长度、最小值和最大值的若干示例。

相关链接:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值