python的容器数据类型,切片,复制

简介: python的容器数据类型,切片,复制

容器类型

容器数据类型:在pyhton的内置数据类型中,有一类数据类型,它能像容器那样存储不同的元素。

容器类型的分类

分类一

按照组织方法,可以分为序列、映射和集合。

序列:列表、元组、字符串、Unicode 字符串、buffer 对象和 xrange 对象

映射:字典

集合:可变集合和不可变集合

分类二

按照对象是否可变来对容器数据类型进行分类,可分为可变类型,不可变类型。

不可变类型:除非重新获得赋值操作,否则对象的内容不能够改变(not mutable),这些类型主要有字符串类型、元组、不可变集合。

可变类型:对象的内容能够改变(mutable),主要有列表、字典、可变集合。

容器中序列是用到比较频繁,序列的介绍,这里就不多说。接下来就介绍一下序列的简单操作。

序列的索引

序列通过索引来访问其中的元素。索引又称下标,以数字 n 表示序列第 n 个元素。索引都使用方括号[]来表达。

需要注意的是:

索引从 0 开始,表示第 1 个元素,索引 1 表示第 2 个元素,以此类推。索引编号也可以使用负数,-1 表示最后一个元素,-n 表示倒数第 n 个元素。

访问一个超出索引范围的编号,程序会抛出 IndexError 错误。

例如:

s1= range(1,11)  #取值范围是1~10
print(len(s1) )  #s1的数据个数
print(s1[0])     #列表中的第一个条数据
运行结果
10

序列的切片

切片是索引的高级应用形式,能够同时索引多个元素。序列切片时,可以指定要访问的范围,包括开始元素、结束元素,也可以指定步长(可选)。

语法如下:

listObject[start: stop]
listObject[start: stop: step

方括号里的内容代表了一个半开区间(左闭右开).

它表示截取的字符串子串将会包含编号为 start 的元素,但不包含编号为 stop 的元素。步长( step)为 n,则意味着在指定的 start 到 stop 范围内,每 n 个元素提取一个,返回一个新列表。

索引编号可以使用负数 n,表示倒数第 n 个元素。此时,start 和 stop 的大小关系也必须反转,即 start 必须大于 stop。

例如:

s1= [1,2,3,4,5,6,7,8,9,10]
print(s1[2:8:2])    #从序列2开始,每隔2步,显示一个数,到序列8停止(不包含8)
print(s1[8:2:-2])   #从序列8开始,每隔2步,显示一个数,到序列2停止(不包含2)
print(s1[1:])       #显示从序列1条到最后的列表。

列表与数据结构

链表

列表的底层是由 C 语言数组实现的,数组是连续列表,链表是链接列表,二者在概念和结构上完全不同。

栈是一种常用的数据结构,特征是后进先出出(Last-In-Fist-Out,LIFO);列表本身可以作为一个栈,只使用 pop()和 append()来修改数据。

pop()从列表尾部移除一个数据,实现出栈;append()从列表尾部增加一个数据,实现压栈。

队列

队列在队尾加入数据(进入队列),在队首删除数据(移出队列),是一种先进先出(First-In-First-Out,FIFO)的数据结构。

可变对象的复制

可变对象的复制有如下的实现形式

赋值

(两个列表都指向的同一个存储地址(同变化))

s1= [1,2,3,4,5,6,7,8,9,10]
b1 = s1
print(b1)
s1.pop()
print(b1)

浅拷贝

当复制变量本身时,产生了一个独立副本,但其中的各个元素仍然是通过引用的方式来复制的,这称为浅拷贝(彼此独立)。有如下的方式进行浅拷贝

1.切片

s1= [1,2,3,4,5,6,7,8,9,10]
b1 = s1[:]
print(b1)
s1.pop()
print(b1)

2.copy()函数

import copy
s1= [1,2,3,4,5,6,7,8,9,10]
b1 = cppy.copy(s1)
print(b1)
s1.pop()
print(b1)

3.工厂函数

s1= [1,2,3,4,5,6,7,8,9,10]
b1 = list(s1)
print(b1)
s1.pop()
print(b1)

深拷贝

copy 模块提供了 deepcopy()方法,可以对嵌套的可变对象建立独立副本,称为深拷贝。

嵌套(同变化

import copy
s1= [1,2,3,4,5,6,7,8,9,10]
b1 = cppy.copy(s1)
print(b1)
s1[3].append(4.3)
print(b1)

deepcopy()方法(彼此独立

import copy
s1= [1,2,3,4,[4.1,4.2],5,6,7,8,9,10]
b1 = copy.deepcopy(s1)
print(b1)
s1[3].append(4.3)
print(b1)

感谢大家,点赞,收藏,关注,评论!

虽然五一快结束啦!但还是要祝大家节日快乐!

目录
相关文章
|
26天前
|
Python
【10月更文挑战第7天】「Mac上学Python 13」基础篇7 - 数据类型转换与NoneType详解
本篇将详细介绍Python中的常见数据类型转换方法以及 `NoneType` 的概念。包括如何在整数、浮点数、字符串等不同数据类型之间进行转换,并展示如何使用 `None` 进行初始赋值和处理特殊情况。通过本篇的学习,用户将深入理解如何处理不同类型的数据,并能够在代码中灵活使用 `None` 处理未赋值状态。
54 2
【10月更文挑战第7天】「Mac上学Python 13」基础篇7 - 数据类型转换与NoneType详解
|
29天前
|
编译器 数据安全/隐私保护 Python
Python--基本数据类型
【10月更文挑战第4天】
|
1月前
|
存储 Python
python数据类型、debug工具(一)
python数据类型、debug工具(一)
|
1月前
|
索引 Python
Python 高级编程:深入探索字符串切片
在Python中,字符串切片功能强大,可灵活提取特定部分。本文详细介绍切片技巧:基本切片、省略起始或结束索引、使用负数索引、设定步长及反转字符串等。此外,还介绍了如何结合其他操作进行切片处理,如先转换大小写再提取子串。 来源:https://www.wodianping.com/yeyou/2024-10/48238.html
33 4
|
1月前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
20 3
|
2月前
|
存储 Java C++
30天拿下Python之数据类型
30天拿下Python之数据类型
32 4
|
2月前
|
存储 索引 Python
python中的数据容器
python中的数据容器
|
25天前
|
存储 程序员 Python
Python编程入门:探索变量和数据类型
【10月更文挑战第8天】本文是针对初学者的Python编程入门指南,重点介绍Python中变量的定义和使用以及不同的数据类型。我们将通过实例来理解基本概念,并展示如何在Python程序中应用这些知识。文章旨在帮助初学者建立扎实的基础,使他们能够更自信地编写Python代码。
|
27天前
|
存储 安全 Serverless
Python学习四:流程控制语句(if-else、while、for),高级数据类型(字符串、列表、元组、字典)的操作
这篇文章主要介绍了Python中的流程控制语句(包括if-else、while、for循环)和高级数据类型(字符串、列表、元组、字典)的操作。
28 0
|
1月前
|
存储 程序员 Python
python数据类型、debug工具(二)
python数据类型、debug工具(二)