第9章 序列

数据结构常见的有数组(array)、集合(set)、列表(list)、队列(queue)、链表(linkedlist)、树(tree)、堆(heap)、栈(stack)和字典(dictionary)等结构。Python中的数据结构主要有序列、集合和字典。

注意:Python中没有数组结构,因为数组要求元素类型是一样的。而Python作为动态类型语言,不强制声明变量的数据结构,也不强制检查元素的数据类型,不能保证元素的数据类型一致,所以Python中没有数据结构。

9.1 序列概述

序列(sequence)是一种可迭代的(可迭代iterable,是指它的成员能返回一次的对象)、元素有序、可以重复出现的数据结构,可以通过索引访问元素。

序列包括的结构有列表、字符串(str)、元组(tuple)、范围(range)和字节序列(bytes)。序列可进行的操作有索引、切片(slicing)、加和乘。 

9.1.1 索引操作

序列第一个元素的索引是0,其他元素的索引是第一个元素的偏移量,可以有正偏移量,称为正值索引;也可以有负偏移量,称为负值索引。正值索引的最后一个元素索引是“序列索引-1”,负值索引的最后一个元素索引是“-1”。例如Hello字符串。

 序列中的元素是通过索引下标访问的,即中括号[index]方式访问。

 a[0]是访问序列的第一个元素,最后一个元素的索引可以是4或-1。但是索引超过范围,则会发生IndexError错误。另外,获取序列的长度使用函数len(),类似的序列还有max()和min()函数。max()函数返回ASCII码最大字符,min()函数返回ASCII码最小字符,end()函数是返回字符的ASCII码。

9.1.2 序列的加和乘

+运算符可以将两个序列连接在一起,*运算符可以将序列重复多次。

9.1.3 序列切片 

序列的切片就是从序列中切分出小的子序列。切片使用切片运算符,切片运算符有如下两种形式。

• [start: end]:start是开始索引,end是结束索引。

• [start: end: step]:start是开始索引,end是结束索引,step是步长,步长是在切片时获取元素的间隔。步长可以为正整数,也可为负整数。

下次元素索引 = 当次元素索引+步长

注意:切下的切片包括start位置元素,但不包括end位置元素,start和end都可以省略。

9.2 元组

元组是一种序列结构,也是一种不可变序列,一旦创建就不能修改。

9.2.1 创建元组

 元组可以使用如下两种方式创建。

(1)使用逗号","分割元素。

(2)tuple([iterable])函数

创建元组时使用小括号把元素括起来不是必须的。

元组中的元素可以是任何数据类型。

此外,当一个元组只有一个元素时,后面的逗号不能省略,即(21,)表示的是只有一个元素的元组,而(21)表示的是一个整数。另外,()可以创建空元组。 

9.2.2 访问元组

元组作为序列可以通过下标索引访问其中的元素,也可以对其进行切片。

元组还可以进行拆包(unpack)操作,就是将元组的元素取出赋值给不同变量。

变量n前面有星号,表示将剩下的元素作为一个列表赋值给变量n。使用下划线指定不取值哪些元素。

9.2.3 遍历元组

 遍历元组一般使用for循环。

a = (21, 32, 43, 45)
for item in a:
    print(item)

print('------------------')
for i, item in enumerate(a):
    print('{0} - {1}'.format(i, item))

enumerate(a)函数可以获得元组对象,该元组对象有两个元素,第一个元素是索引,第二个元素是数值,所以(i,item)是元组拆包过程,最后变量i是元组a的当前索引,item是元组a的当前元素值。

9.3 列表 

列表是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除和替换列表中的元素。

9.3.1 列表创建

以下两种方式创建列表。

(1)使用中括号[]将元素括起来,元素之间用逗号分隔。

(2)list([iterable])函数。

不能省略[],不然就是创建元组了。创建空列表是[]表达式,列表中可以放入任何元素 。

无论是元组还是列表,每个元素后面都跟着一个逗号,只是最后一个元素的逗号经常是省略的。

使用了list([iterable])函数创建列表对象,参数iterable可以是任何可迭代对象,元组可以是可迭代对象,可以作为list()函数创建列表对象。

9.3.2 追加元素

追加单个元素可以使用append()方法。

追加另一列表,可以使用+运算符或extend()方法。

append()方法如下:

list.append(x)

x参数是要追加的单个元素值。

extend()方法语法如下:

list.extend(t)

t参数是要追加的另一个列表。

列表支持+运算。

9.3.3 插入元素 

 插入元素可以使用列表的insert()方法,可以在指定索引位置插入一个元素。

lnsert()方法语法如下:

list.insert(i, x)

参数i是要插入的索引,参数x是要插入的元素数值。

9.3.4 替换元素

通过列表下标将索引元素放在赋值符号“=”左边,进行赋值即可替换。

9.3.5 删除元素 

列表中实现删除元素的方式有两种:一种是使用列表的remove()方法;另一种是使用列表的pop()方法。

(1)remove()方法

remove()方法从左往右查找列表中的元素,如果找到匹配元素则删除,注意如果找到多个匹配元素,只是删除第一个,如果没有找到则会抛出错误。

list.remove(x)

x参数是要找的元素值。

(2)pop()方法

pop()方法也会删除列表中的元素,但它会将成功删除的元素返回。

()pop方法语法如下:

item = list.pop(i)

参数i是指定删除元素的索引,i可以省略,表示删除最后一个元素。返回值item是删除的元素。

9.3.6 其他常用方法 

๏ reverse()。倒置列表。

๏ copy()。复制列表。

๏ clear()。清除列表中的所有元素。

๏ index(x[, i[, j]])。返回查找x第一次出现的索引,i是开始查找索引,j 是结束查找索引。该方法继承自序列,元组和字符串也可以使用该 方法。

๏ count(x)。返回x出现的次数。该方法继承自序列,元组和字符串也 可以使用该方法。

9.3.7 列表推导式 

 推导式:将一种数据结构作为输入,经过过滤、计算等处理,最后输出另一种数据结构。根据数据结构的不同可分为列表推导式、集合推导式和字典推导式。本节先介绍列表推导式。

通过for循环实现获得0~9中偶数的平方数列:

n_list = []
for x in range(10):
    if x % 2 == 0:
        n_list.append(x ** 2)
print(n_list)

也可以通过列表推导式实现:

n_list = [x ** 2 for x in range(10) if x % 2 == 0]
print(n_list)

 n_list = [x ** 2 for x in range(10) if x % 2 == 0]

x ** 2是输出表达式

x是元素变量

range(10)输入序列

if x % 2 == 0条件语句,可以省略,可以包含多个条件。

n_list = [x for x in range(100) if x % 2 == 0 if x % 5 == 0]
print(n_list)
两个条件语句if x % 2 == 0 和 if x % 5 == 0,可见它们“与”的关系。
---------------------------------------------------------------------------------------

练习:1.使用列表推导式,输出1~100的所有质数。

import math
a = [p for p in range(2, 100) if 0 not in [p % d for d in range(2, int(math.sqrt(p)) + 1)]]
print(a)

2.使用列表推导式,输出200~300的所有能被5整除或6整除的数。 

n = [x for x in range(200,301) if x % 5 == 0 if x % 6 ==0]
print(n)

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值