python课程第二周 内置数据结构——列表和元组

5种内置数据结构:列表、元组、字典、集合、字符串。列表、字典、字符串三种被称为线性结构。

  • 针对线性结构的操作有:切片、封包和解包、成员运算符、迭代。
  • 针对数据结构的操作有解析式:解析式分为列表解析、生成器解析、集合解析和字典解析。

后面三种是Python3.x特有的。

基本框架如下:

一、列表:Python中最具灵活性的有序集合对象类型

列表可包含任何种类的对象:数字、字符串、字典、集合甚至其他列表,这个特性称为异构。还具有可变长度和任意嵌套的特性,属于可变长度序列。

(1)列表的初始化,有两种方式,第一种使用list()函数,第二种直接使用空列表赋值:

>>>lst=list()
>>>lst=[1,2,3]

(2)列表元素的访问,主要通过列表的下标和索引。元素的下标从0开始。如果给出的下标超出下标范围,会给出IndexError错误。也支持逆向访问列表内部元素,下标从-1开始,同时支持序列的分片操作。

>>>lst[0]  访问第一个元素
1
>>>lst[-1]        访问最后一个元素,逆序访问
3
>>>lst[2]          访问最后一个元素
3
>>>lst[0:] 访问第一个到最后一个元素
[1,2,3]

(3)列表的方法:

append(object)     #给列表添加一个对象object,返回值是None

insert(index,object) #给列表添加一个对象object,但是可以根据index确定插入位置,返回值None

extend(iterable) #从迭代器中添加元素到列表中

下面是几个示例:

lst=[5,2,10]

索引是在列表索引范围内,正常插入:

>>>lst.insert(0,7)
>>>lst
[7,5,2,10]

索引超出列表的范围,在最后插入:

>>>lst.insert(100,13)
>>>lst
[7,5,2,10,13]

索引使用负值且在正常索引范围内,从后往前插入:

>>>lst.insert(-1,12)
>>>lst
[7,5,2,10,12,13]

索引使用负值但是超出索引范围,从最开始插入:

>>> lst.insert(-100,20)
>>> lst
[20, 7, 5.2, 10, 12, 13]

从迭代器中添加元素

>>>lst.extend([1,2,3])
>>>lst
[20, 7, 5.2, 10, 12, 13,1,2,3]

pop(index)  #根据索引index将列表中的某个元素移除并返回这个元素,如果没有给出index,返回最后一个元素。如果列表为空或者索引超出范围,则给出IndexError错误。

lst=[5,2,10]
>>>lst.pop()
10
>>lst
[5,2]
>>>lst.pop(0)
5
>>>lst
[2]
>>>lst.pop(-1)
2
>>>lst
[]

remove(value) #根据value值删除list中的一个元素value,如果value不存在,会提示ValueError,返回值None

>>>lst=[5,2,10]
>>>lst.remove[10]
>>>lst
[5,2]

clear() #清除list中所有的元素,返回值None。

>>>lst.clear()
>>>lst
[]

del L[k]

del L[i:j] 根据索引删除指定值或者删除某个范围内的值

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

reverse() #将list中的元素反转

sort(key=None, reverse=False) #将list中的元素有序排列,reverse为True时,将list逆序排列,key是个函数对象,使用该函数对list进行排序。排序后返回None。

L[k] = n   #根据列表索引来修改对应位置的值

示例如下:

>>>lst= [5, 2, 10]
>>>sort(lst)#排序
>>>lst
[2,5,10]
>>>reverse(lst)   #倒转
>>>lst
[10,5,2]
>>>lst[0] = 100#索引改值
>>>lst
[100, 2, 10]

index(value,[start,[stop]])   #根据value值,返回start和stop索引范围内第一次出现value的索引,value不存在时返回ValueError。

>>>lst= [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘]
>>>lst.index(‘a‘)
0
>>>lst.append(‘b‘)
>>>lst.index(‘b‘,0,4)
1

count(value) #根据value值返回列表中value的个数,返回值是整数

>>>lst.count(‘b‘)
2

len(object,/)   #返回列表中的元素个数

>>>len(lst)
6

其他方法

copy()  #返回list的一个副本。

切片操作

基本格式:seq[start:stop:step],输出的内容是[start,stop),step指的是隔几个数取一个值,看下面示例。

>>>lst=[1,2,3,4,5,6,7,8]
>>>lst[0:8]
[1,2,3,4,5,6,7,8]
>>>lst[0:8:2]
[1,3,5,7]

因为一般情况下切片操作是从左往右,因此start一定要小于stop,否则只能得到一个空数组。

>>>lst[7:5]
[]

特殊情况下,例如step<0时,例如:

当start>stop时,step=-1,输出(stop,start]

>>>lst[5:1:-1]
[6,5,4,3]

当start或stop超出索引范围时(step>0),分为4种情况:

1. start超出索引,stop没有超过索引,同时start的绝对值大于列表长度时,从索引0开始输出一直到索引stop-1

>>>lst=[1,2,3,4,5,6,7,8]   #列表长度为8
>>>lst[-10:5]
[1,2,3,4,5]

2. start超过索引,stop没有超过索引,同时start的绝对值小于列表长度时,取值范围是[len(lst)+start, stop]

>>>lst[-5:5]             #取值范围是[8-5,5],即[3,5]
[4,5]

2. stop超出索引,start没有超过索引从start开始输出,直到最后一个元素停止

>>>lst[3,100]
[4,5,6,7,8]

3. 当start和stop同时超出索引时,start绝对值大于数组长度,输出seq第一个到最后一个元素。

>>> lst[-100:100]
[1, 2, 3, 4, 5, 6, 7, 8]

4. 当start和stop同时超出索引时,start绝对值小于数组长度时,取值范围是[len(lst)+start:]

>>>lst[-5:100]
[4,5,6,7,8]

切片操作支持省略start或stop:

当start省略时,从索引0开始输出,到stop-1停止

>>>lst[:5]
[1,2,3,4]

当stop省略时,从start开始,到最后一个元素停止

>>>lst[3:]
[4,5,6,7,8]

当start和stop都省略时,输出seq所有元素。

lst[:]
[1, 2, 3, 4, 5, 6, 7, 8]

元组(tuple):不可变的数据结构,位置有序的对象的集合。

通常写成圆括号中的一系列项,虽然元组不支持任何方法调用,但具有列表的大多数属性。

  • 通过偏移和索引存取
  • 属于不可不序列类型
  • 固定长度,不能伸长或缩短,异构,可以包含其他复合对象,支持嵌套。
  • 对象引用的数组,对元组进行索引操作的速度相对较快。

1. 元组的定义

t=()   #空元组
t=tuple()  #空元组
t=(1,2,3)#3个元素的元组,索引只能用来访问元素
t=(1,) #定义单个元素的元组时,需要在元素后面加个逗号,否则t就是一个数字。

2. 元组的方法

t.count(value)                    #返回元组内某个元素个数
t.index(value,[start,[stop]])     #返回元素value第一次出现的索引
t[i]、t[i:j]                      #根据索引来访问元素,根据分片和长度来访问元素
t1+t2、t * 3                      #合并和重复

*元组的不可变性只有一层,即元组的元素是单层或不可变元素时,例如数字、字符,元组元素不可变,但元组的元素是多层可变元素时,该元素自身不能被改变,而元素内部值可变,例如列表,下面请看示例:

1. 元组元素是数字和字符串时

>>>t = ( 1, ‘test‘, 4)
>>> t[0] = ‘a‘
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ‘tuple‘ object does not support item assignment    #元素不可变
>>> t[1] = ‘TEST‘
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ‘tuple‘ object does not support item assignment   #元素不可变

2. 元组元素是数字、列表时

>>>t = (1, [2, 3], 4)
>>> t[1] = [4, 5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ‘tuple‘ object does not support item assignment   #元组元素不可变
>>> t[1][1] = 5
>>> t
(1, [2, 5], 4)       #列表仍然可变

元组通常用于处理具有固定关系的情况,在某些要求不可变内容的情形下应用。

本周的主要知识点如下:

  1. 列表的初始化、基本的增删改查方法;
  2. 列表的分片处理
  3. 元组的初始化和基本方法
时间: 2024-10-15 20:00:35

python课程第二周 内置数据结构——列表和元组的相关文章

Python内置数据结构——列表list,元组tuple

内置数据结构分类: 数值型 int , float , complex , bool 序列对象 字符串 str 列表 list tuple(元组) 键值对 集合 set 字典 dict 数字型 int ,float , complex , bool都是class, 1,5.0 , 2+3j都是对象的实例 int : python3的int就是长整型,没有大小限制,受限于内存大小 float:有整数部分和小数部分组成,支持十进制和科学计数法表示,只有双精度型 complex:有实数和虚部组成,实部

python课程第三周 内置数据结构——字典

字典,Python中的无序集合,key-value结构,通过键来访问对应的值,而不是依靠偏移或者索引来访问值.下面是字典的一些基本属性: 字典的value可以是任意值,例如数字.字符串.列表.元组,甚至是字典本身 字典的key必须是可hash的值 字典的key是唯一的 字典没有切片操作,只能通过key来访问value 字典内的元素都是无序存储的 可变长度.异构.任意嵌套 对象引用表:采用最优化的散列算法来查找键,因此键搜索速度非常快,字典存储的是对象引用(而不是拷贝). 字典的初始化: d=di

python的四种内置数据结构

对于每种编程语言一般都会规定一些容器来保存某些数据,就像java的集合和数组一样python也同样有这样的结构 而对于python他有四个这样的内置容器来存储数据,他们都是python语言的一部分可以直接使用而无需额外的导入 一.列表 列表一种跟java和c中的数据很像的一种数据结构,他都是保存一系列相似,且有序元素的集合,不过不同的是列表中的元素可以不是同一种数据类型,且列表的长度是可变的 可以动态的增加可减少这一点则有点像java中的stringBuilder对象,列表中有一点值得注意的是在

Python第二周之字符串,列表,元组,集合,字典

# 字符串 1.定义:str类型的,是字符串.例如: var1 = 'Hello world!' 2.使用: 1.增:+ 2.查:index(str), find(str), in 字符串的常用方法 def main(): print(help(''.isalnum)) str1 = 'hello, world' print(len(str1)) print(str1.capitalize()) print(str1.upper()) print(str1) print(str1.find('o

内置数据结构列表字符串及相关习题

列表一个队列,一个排列整齐的队伍列表内的个体称作元素,由若干元素组成列表元素可以是任意对象(数字.字符串.对象.列表等)列表内元素有顺序,可以使用索引线性的数据结构使用 [ ] 表示列表是可变的列表与链表的列表:修区别改代价大 查找代价小 (间隔固定 )链表: 修改代价小 查找代价大 (从头找)列表练习计算杨辉三角前6行基础方法利用索引计算补零法尾部补零后通过索引计算对称法利用对称性进行打印单行覆盖开辟足够空间进行覆盖冒泡法依次接收用户输入的3个数,排序后打印字符串一个个字符组成的有序的序列,是

Python内置数据结构

内置数据结构 可变 list 列表 byterray dict 字典 set 集合 不可变 tuple 元组 bytes 常量(int,str,bool 等) list 列表 (推荐使用索引)列表相当于一个排列整齐的队列,可以理解为在内存中是一片排列整齐的连续的空间,它是可索引,可变的,有序的,线性结构,可迭代.优点:通过索引(index)查找.替换元素 效率高 时间复杂度O(1).尾部追加(append)与 尾部移除(pop)元素快 效率高 时间复杂度O(1).缺点:从中间增加或移除元素会使列

Python内置数据结构操作VS sqlite3操作

1.摘要 在同一数据库中查询某值,内置数据结构的查询速度快还是数据库sqlite3的查询速度快?针对这一问题,通过构建一个包含2500个随机数的列表,并将其插入sqlite3数据库中,利用timeit模块,分别对内置数据结构list和sqlite3查询某一值在不在数据组中进行对比. 2.代码 >>> import numpy as np >>> import sqlite3 >>> test=np.random.randn(2500) >>

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(2)

Free SpaceTable(FST) FST指明了ATB中包含的空闲空间.当磁盘被选择分配时ASM会生成一个磁盘FST.这个允许ASM跳过被ATBs占用的空间.FST包含每个ATB的条目.每个条目描述了extents size的总数和空闲extents.FST的目的是优化分配操作.事实上FST位于AllocationTable中.FST位于每个AT的第二个block(block 1). PartnershipStatus Table(PST) PST跟踪磁盘组资格和磁盘间的配合关系.ASM生

ORACLE AUTOMATIC STORAGE MANAGEMENT翻译-第十章ASM内置数据结构(1)

CHAPTER 10 ASM Persistent Data Structures 与传统文件系统和卷管理器一样,ASM存储元数据用来描述和跟踪磁盘组的内容.所有的元数据描述存储在上面的ASM磁盘组的组成和内容,这些元数据使得磁盘组实现了自描述.ASM磁盘组有两类元数据:物理元数据和虚拟元数据.物理元数据位于磁盘上.虚拟元数据存储在ASM文件中,因此与其他ASM文件一样这些元数据均匀分布在磁盘组的磁盘上.RDBMS无法打开ASM读取元数据目录也不能对ASM物理元数据的位置执行读写(I/O)操作.