Python基础教程:关于序列操作的方式方法

news2024/12/25 1:32:30

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

序列是指按照位置顺序来存储数据的数据结构,也就是说能通过数值索引进行操作。

实际上,python对序列的解释是:只要类型对象中重载了__len__()和__getitem__(),且它们的整数参数从0开始,就表示这个类型满足序列协议,是一个序列类型。

python有三种基本的序列类型:列表、元组和range对象。

当然,还有特别定制的序列类型:str和binary data。

序列类型又分为可变序列和不可变序列。

可变序列表示可以原处修改的序列,不可变序列意味着不允许原处修改。

例如,列表是可变序列,字符串是不可变序列。

序列的通用操作

下面这些操作是序列通用的,无论是可变、不可变序列。

但通用并不意味着所有序列都支持这些操作,有些特殊的序列因为某些原因不支持某些操作也是合理的。

注意:python中序列操作在索引越界的时候都会报错。

1.测试元素是否存在

x in S和x not in S,返回True或False。

例如:

>>> 'a' in "abcd"
True
>>> 'aa' in "abcd"
False
>>> 'ab' in "abcd"
True
>>> 3 in [1,2,3,4]
True
2.加法和乘法符号

S1 + S2或S * N或N * S,其中S1和S2是同一种序列类型,N表示序列的重复次数。

例如:

>>> [1,2] + [3,4]
[1, 2, 3, 4]

>>> [1,2] * 3
[1, 2, 1, 2, 1, 2]
>>> 3 * [1, 2]
[1, 2, 1, 2, 1, 2]

注意:序列中保存的是元素的引用地址,所以对于序列中的可变元素,+ *时需要注意修改的影响范围:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = [1,2,3,4]
>>> L1 = [['a'],['b']]

>>> L0 = L + L1
>>> L0
[1, 2, 3, 4, ['a'], ['b']]

>>> L1[0][0] = "aa"
>>> L0
[1, 2, 3, 4, ['aa'], ['b']]

上面修改"a"为"aa"也会影响到+的结果L0,因为[‘a’]是一个可变对象。

同样对于*的重复操作,也是拷贝引用:

>>> L = []
>>> L1 = [L] * 3
>>> L1
[[], [], []]

>>> L.append(3)
>>> L1
[[3], [3], [3]]
3.len()、max()和min()函数

len()返回序列的元素个数,也就是序列的长度。

min()和max()分别返回序列中最小、最大的元素。

>>> len(L), min(L), max(L)
(4, 'a', 'd')
4.找出元素在序列中出现的次数count()
>>> s="hello world"
>>> s.count("h"),s.count("o")
(1, 2)
5.索引取元素

S[i],i为从0开始的数值,可以取负数表示从尾部开始取。

例如:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L
['a', 'b', 'c', 'd']
>>> L[0]
'a'
>>> L[1]
'b'
>>> L[-1]
'd'

负数的i等价于len(S)+i作为索引。

例如,len(S) = 3, i = -1,表示取最后一个元素,也就是index=2的元素。

6.分片

分片操作用于从序列中取出子序列,它会创建新的内存块来保存取出来的序列对象。

S[i:j]:从索引位i取到索引位j,不包括j

S[i:]:从索引位i开始取到最结尾

S[:j]:从最开头取到索引位j,不包括j

S[:]:从头取到尾,相当于拷贝了序列,但得到的是新序列

S[i:j:k]:k表示取元素时的步进间隔,默认为1,表示每个元素都取,如果为2,则表示取一个跳过一个分片的区间是左闭右开的,所以不会包括j的索引位。i和j可以是负数,负数表示从尾部开始计算索引位。例如,-1表示最后一个元素,-2表示倒数第二个元素。

特别地,如果i = j,则表示找到序列中的这个位置,但因为切片长度位0,所以返回空。

例如:

>>> s = "hello world"
>>> len(s)
11

>>> s[0:6]
'hello '
>>> s[:6]
'hello '

>>> s[6:10]   # 不包括index=10
'worl'
>>> s[6:11]   # 所以用大于10的结束位
'world'
>>> s[6:]
'world'
>>> s[6:-1]
'worl'

>>> s[:]      # 拷贝序列得到副本
'hello world'

>>> s[::1]     # 步进为1,默认的
'hello world'
>>> s[::2]     # 每次跳过一个元素
'hlowrd'

>>> s[1:1]    # 找到index=1的位置
''
7.找出第一个元素的位置index()

index(x,i,j)表示从序列中搜索元素x并返回第一次出现的x的位置,如果给定了i,则表示从索引位i开始搜索,给定了j则表示最多搜索到索引位为j的位置。

如果找不到元素,将报错。

i和j可以是负数,但无论它们是正数还是负数,都是搜索的开始和结束位。

>>> s="hello world"
>>> s.index("o")
4
>>> s.index("o",1,-1)
4
>>> s.index("o",-5)    # 从倒数第5个元素开始搜索
7
>>> s.index("a")       # 搜索不到时报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

不可变序列的操作

相比可变序列,不可变序列的唯一操作是可以支持内置的hash()操作。

可变序列无法hash()。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> hash("asd")
-2014632507

>>> hash((1,23))
1320437575

>>> hash([1,23])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

能够hash的不可变序列,意味着能作为dict的key,能保存到set或frozenset中。

可变序列的操作

  • s[i] = x、s[i:j] = t将序列中的元素替换成x或可迭代对象t

  • s[i:j:K] = t将序列中的元素替换成可迭代对象t,t的长度必须和s[i:j:k]的长度一样

  • del s[i]、del s[i:j]删除序列中的元素,等价于s[i] = []、s[i:j] = []

  • del s[i:j:k]删除序列中的某些元素,k为步进值

  • s.remove(x):移除第一次出现的元素x

  • s.clear()表示清空序列中的所有元素,等价于del s[:]

  • s.pop([i])表示移除序列s中的第i个元素并返回这个元素,中括号表示可选,如果没有参数,默认移除最后一个元素

  • s.append(x)向序列的尾部追加元素x,等价于s[len(s):len(s)] = [x]

  • s.extend(t)或s += t表示将t扩展到序列s的尾部,等价于s[len(s):len(s)] = t

  • s.insert(i,x)表示将x插入到序列中的i索引位置处,等价于s[i:i] = [x]

  • s *= n表示将序列n的元素重复n次追加到s的尾部

  • s.copy()表示拷贝序列得到一个新的序列副本,等价于s[:]

  • s.reverse()原地反转序列s,为了节约内存空间,所以是原地反转,不会返回反转后的序列

对于序列,还有一个内置函数reversed(SEQ)

与之对应的,还有一个内置函数sorted(),但它操作的对象是可迭代对象,并不一定总是序列。

示例1:序列元素赋值
>>> L = ['aa','bb','cc','dd','ee','ff']
>>> L1 = [1,2,3,4]

>>> L[0] = "a"
>>> L
['a', 'bb', 'cc', 'dd', 'ee', 'ff']

>>> L[1:2] = L1
>>> L
['a', 1, 2, 3, 4, 'cc', 'dd', 'ee', 'ff']

>>> L[::2] = [1,2,3,4,5]
>>> L
[1, 1, 2, 3, 3, 'cc', 4, 'ee', 5]
示例2:删除元素

删除相关操作有del、remove()、pop()、clear()。

例如:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = ['aa','bb','cc','dd','ee','ff']
>>> del L[1]
>>> L
['aa', 'cc', 'dd', 'ee', 'ff']
>>> del L[1:2]
>>> L
['aa', 'dd', 'ee', 'ff']
>>> del L[::2]
>>> L
['dd', 'ff']

>>> L = ['aa','bb','cc','dd','ee','ff']
>>> L.remove('aa')
>>> L
['bb', 'cc', 'dd', 'ee', 'ff']

>>> L.pop()
'ff'
>>> L
['bb', 'cc', 'dd', 'ee']

>>> L.pop(2)
'dd'
>>> L
['bb', 'cc', 'ee']

>>> L.clear()
>>> L
[]
示例3:添加元素

相关操作有append()、extend()、insert()、s *= n。

例如:

>>> L = ['aa', 'bb', 'cc', 'dd', 'ee']
>>> L1 = [1,2,3,4]

>>> L.append("ff")
>>> L
['aa', 'bb', 'cc', 'dd', 'ee', 'ff']

>>> L.insert(1,"a")
>>> L
['aa', 'a', 'bb', 'cc', 'dd', 'ee', 'ff']

>>> L.extend(L1)
>>> L
['aa', 'a', 'bb', 'cc', 'dd', 'ee', 'ff', 1, 2, 3, 4]

>>> L1 * 2
[1, 2, 3, 4, 1, 2, 3, 4]
示例4:其它操作

拷贝序列copy()、反转序列reverse()。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> L = ['aa', 'bb', 'cc', 'dd', 'ee']

>>> L1 = L.copy()
>>> L1
['aa', 'bb', 'cc', 'dd', 'ee']

>>> L.reverse()
>>> L
['ee', 'dd', 'cc', 'bb', 'aa']

还有一个可用于序列的内置函数reversed(),它反转序列,并返回可迭代对象。

所以,如果要将它展现出来,需要构建容器。

例如:

>>> L = ['aa', 'bb', 'cc', 'dd', 'ee']

>>> list(reversed(L))
['ee', 'dd', 'cc', 'bb', 'aa']

>>> set(reversed(L))
{'aa', 'bb', 'ee', 'cc', 'dd'}

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言系统化精讲(七):C语言数组详解

文章目录 一、数组的基本概念二、一维数组2.1 一维数组的定义2.2 一维数组初始化2.3 一维数组的引用 三、二维数组3.1 二维数组的定义3.2 二维数组初始化3.3 二维数组的引用 四、C语言数组是静态的&#xff0c;不能插入或删除元素五、C语言数组的越界和溢出5.1 数组越界5.2 数组…

C++基础:函数模板

为了代码重用&#xff0c;代码必须是通用的&#xff1b;通用的代码就必须不受数据类型的限制。那么我们可以把数据类型改为一个设计参数&#xff0c;这种类型的程序设计称为参数化程序设计&#xff0c;软件模板有模板构造&#xff0c;包括函数模板和类模板。 函数模板可以用来…

分享一下怎么做一个签到积分的微信小程序

在微信小程序中&#xff0c;签到积分功能是一种非常实用的功能&#xff0c;它可以帮助企业吸引用户&#xff0c;增加用户的忠诚度和活跃度。下面将介绍如何设计和实现一个签到积分的微信小程序。 一、设计页面 签到积分微信小程序的页面设计应该简洁明了&#xff0c;操作简单。…

error: the following arguments are required: --model, --data 解决方法

错误原因&#xff1a;Windows下需要缺乏配置参数&#xff0c;需要进行相关参数配置。 解决办法&#xff1a;在Pycharm的编辑设置&#xff0c;加上–model--model ****,其中****为指定的模型名称&#xff0c;按照自己实际报错进行添加&#xff0c;比如我这里要跑的模型为bert&am…

如何让元素在页面中完美居中?看这篇文章就够了!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…

Python爬虫防止被封的方法:动态代理ip

目录 前言 一、为什么需要使用动态IP代理 1.网站反爬虫机制 2.突破本地IP限制 3.获取更多数据 二、Python爬虫动态IP代理的实现方法 1.使用第三方库 2.使用爬虫框架 三、预防被封的方法 1.代理池管理 2.请求间隔设置 3.使用多个代理 总结 前言 在进行网站爬取时&…

四周年,创始人李亚飞写给 ShowMeBug 用户的一封信

见信如晤。 此刻&#xff0c;我心怀感激&#xff0c;感谢您对 ShowMeBug 的支持和鼓励。ShowMeBug 在这几年能够在剧烈竞争的环境中存活下来&#xff0c;证明了大家对我们的认可&#xff0c;在此由衷感谢大家。 今天我怀着前所未有的满足感&#xff0c;想分享下 ShowMeBug 成…

共享购模式:重新定义电商购物体验

在当今的电商市场&#xff0c;消费者对购物体验的需求日益增长&#xff0c;他们不再满足于传统的电商模式。为此&#xff0c;共享购模式应运而生&#xff0c;这种创新模式将线下实体商业与线上虚拟商城相结合&#xff0c;为用户带来全新的购物体验。本文将详细讲解共享购模式的…

Mac版好用的Git客户端 Fork 免激活

Fork是一款强大的Git客户端软件&#xff0c;在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具&#xff0c;可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观&#xff0c;易于使用。它提供了许多高级的Git功能&#xff0c;如分支管理、合并、提交、…

基于机器视觉的手势检测和识别算法 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

双十一电视盒子哪个好?数码小编揭晓2023最新电视盒子品牌排行榜

很多消费者反馈电视盒子用不了多久就死机、卡顿&#xff0c;广告超级多&#xff0c;不知道双十一买电视盒子要怎么选择&#xff0c;电视盒子哪个好&#xff1f;小编今天来给大家揭晓一下业内最新发布的电视盒子品牌排行榜&#xff0c;看看入围的都有哪些&#xff1a; 一、泰捷W…

freeRTOS学习day3-任务的挂起和恢复

任务挂起函数 vTaskSuspend(Task1_Handler); 任务恢复函数 vTaskResume(Task1_Handler); 任务挂起后 进入就绪态 会停止运行 实验&#xff1a;创建三个任务 任务一打印 任务二打印 任务三控制任务一的挂起和恢复 #include "sys.h" #include "delay.h&quo…

2024线性代数复习——矩阵代数

相似矩阵&#xff1a;存在可逆矩阵 P P P&#xff0c;使得 P − 1 A P B P^{-1} A PB P−1APB&#xff0c;则称矩阵 A A A&#xff0c; B B B 相似&#xff0c;特征值相等。注意只有相似矩阵 B B B 是对角阵&#xff0c;我们才说它是可以相似对角化的。 A A A 可以相似对角…

渲染对电脑伤害多大?怎么避免对本地电脑的损害?

长时间的渲染会对电脑造成伤害吗&#xff1f;我相信这对于许多从事动画和效果图设计的人来说是一个担忧。本文将详细探讨渲染可能对电脑造成的潜在影响&#xff0c;并提供一些避免这些问题的方法。 1.渲染对电脑伤害多大&#xff1f; 我们都知道&#xff0c;在渲染项目时&…

职场必看!性能测试响应很慢怎么排查?

大多数的性能测试工作人员分为以下三个阶段&#xff1a; 1、出了问题看资源&#xff0c;资源占用如果很高&#xff0c;报以窃喜的心态&#xff0c;恩&#xff0c;发现了&#xff0c;原理是资源瓶颈。 2、资源没有出现瓶颈&#xff0c;通过一些技术手段分析&#xff0c;发现是…

解锁娜扎副驾,年轻人的第一台车就选哪吒AYA

最近“娜扎哪吒”的CP组合可谓刷屏汽车圈,一个是高颜值、有气质的当红演员,一个是有实力、有能力的低调“理工男”,哪吒汽车和娜扎的携手,让不少朋友情不自禁地嗑起了CP,也开始更关注哪吒汽车的产品。 除了刚刚发布的“大气舒适新标杆”哪吒X,入手门槛低、颜值够高、智能体验远…

什么是KEIL的微库(microlib)?

就是下面这个选项&#xff1a; Microlib是什么 Microlib也是一个C语言的库。它是为了小内存的嵌入式系统设计的&#xff0c;用于代替标准C语言库&#xff0c;但是Microlib对标准C语言库进行了裁剪和优化&#xff0c;因此并不完全兼容标准C语言库。Microlib相比于标准库&#x…

前端伪进度条实现(仿antd message使用react组件静态方法)

文章目录 背景实现方法(一) react组件静态方法(二) 通过静态方法改变组件的状态(三) 指定进度条的步幅规则(四) 成功和失败的状态改变1. 成功2. 失败 (五) 组件消失(六) 背景遮罩 最终实现及代码组件代码模拟调用进度条组件的代码 可能遇到的问题静态方法调不到/报错组件渲染两…

23款奔驰GLC260L升级原厂 360全景影像 新款透明底盘

360全景影像影像系统提升行车时的便利&#xff0c;不管是新手或是老司机都将是一个不错的配置&#xff0c;无论是在倒车&#xff0c;挪车以及拐弯转角的时候都能及时关注车辆所处的环境状况&#xff0c;避免盲区事故发生&#xff0c;提升行车出入安全性。Xjh15863 360全景影像…

【超参数研究01】使用网格搜索优化超参数

一、说明 在神经网络训练中&#xff0c;超参数也是需要优化的&#xff0c;然而在超参数较多&#xff08;大于3个&#xff09;后&#xff0c;如果用穷举的&#xff0c;或是通过经验约摸实现就显得费时费力&#xff0c;无论如何&#xff0c;这是需要研究、规范、整合的要点&#…