【Python】高级变量类型

2023-10-30

目录

​列表(List)

​编辑列表定义与结构:

​编辑列表的操作:

​元组(Tuple)

 ​编辑元组的定义:

  ​编辑元组的操作:

 ​编辑元组与格式化字符串:

 ​编辑元组和列表的转换:

​字典(dictionary)

​编辑字典的定义:

 ​编辑字典的操作:

 ​字符串(string)

​编辑字符串的定义:

​编辑字符串的操作:

 ​公共方法:

公共函数:

公共运算符:

for else循环:


Python中的数据的类型比起C语言要更加丰富,Python中不仅有常用的整型、浮点型等常用的数字类的变量,它还包含有一些非数字类型的变量,如:列表、元组、字典和字符串,其中这些非数字类型的变量还类似于C++中的容器。

列表(List)

列表定义与结构:

列表就是一连串数据组成的集合体,它类似于C语言中的数组。但是C语言中的数组一般是不能再扩大的、C语言中的数组大小是指定的,并且C语言中的数组是只能存储一种类型的数据。即只能放1、2、3的话,就不能往里面放abc,但是Python中的列表就可以存放不同的数据类型:

 列表的定义方式也如上图:左边是列表名,右边是一个中括号括起来的数据组,里面的数据元素用逗号分隔。其中列表也是类似于数组的存储方式,都是一格一格地往后存储,我们需要某个数据时只需要像访问一个数组元素一样后面跟上中括号里面是元素序号即可。重点要记住列表下标是从0开始

列表的操作:

1、取索引操作: 

所谓的取索引操作就是你得知了一个数据后,你需要知道这个数组在这个列表中的位置,那么此时我们就需要使用到取索引操作,具体只需要将你的数据作为参数传进去,那么就会返回该数据的位置。注意,如果找不到的话,它会报错。

2、 修改元素:

修改元素就是将特定位置的元素重新赋值,那么我们只需要通过下标找到元素然后重新用等号赋值即可,这里要注意,如果越界了还是会报错。

 3、添加数据:

这里往列表中添加数据又三种方法:尾插、复制列表和中间某个位置插入数据。

先来说尾插,也就是在数据的末尾追加一个新的数据,这个操作对应的是列表里的append方法,我们只需要向它传递一个插入的元素即可;而中间插入就是利用insert的方法,它的使用与append类似,只不过多了一个插入位置的参数。而最后的复制一个列表追加到原列表末尾则是利用extend方法,参数是传递一个新的需要追加的列表。

4、删除数据:

在列表中,我们删除数据的方法有三种:popclearremove。这三个删除方法都有不同,首先是clear,clear表示清空当前的列表中的所有元素,也就是说执行了clear后列表里一个元素也没有。而remove表示清除某个特定的元素,它需要清除的元素就跟在它后面的括号内部作为参数。例如列表里有1,2,3,5,8;那么我们要删除5就需要输入remove(5)即可。这里要注意,如果这个列表中包含多个5,那么remove会默认删除第一个5。而pop与remove类似,只不过它的参数是那个元素的下标号,例如我们要删除5就传进去5的下标4,即pop(4)。注意了,如果我们不给pop传参数,那么它默认删除的是最后一个元素。或者我们还有一种删除方法就是使用del关键字,它类似C语言中的free,都是表示释放了后面变量的内存空间来删除。

5、统计与长度获取

如果我们想要得到列表中的元素个数(即列表长度)或者列表中某个元素的重复次数,那么我们需要使用len算法和count方法。

 6、列表的反转与排序:

列表的反转指的是将原来的一个列表的所有元素倒过来,这里我们实现用的是reverse方法,并且不需要传递参数。 

而列表的排序我们用的则是sort方法,它的参数我们暂时只需要理下面的第三个参数reverse,因为它决定了排序后是否会再次反转,默认情况下是从小到大。如果它为假,那么默认情况下执行的排序从小到大,如果它为真,那么我们的排序顺序是从大到小

 下面的图分别就是reverse是否为真时的排序情况:

 7、列表的遍历:

列表的遍历指的是重复访问这个列表来获得这个列表里的每一个元素,其中Python中也是利用迭代器(iteration)来进行操作的。其中迭代器类似于指针,我们可以利用迭代器去访问到每一个元素。而在Python中简化了方法,直接利用for循环和自己定义的一个变量去接收每一个元素的数据,从而不用直接和迭代器打交道。

元组(Tuple)

 元组的定义:

元组也是一个类似于容器的结构,它也可以用来存储数据,类似于列表,但是元组一般都是存储一些数据类型不同的数据。元组和列表不同,元组不支持增删改数据的功能,也就是说,元组一旦被确定就不能被后续修改了,这就类似于C语言中的常量数组(const);并且元组是以小括号的形式定义的,这也与列表有出入。

Tuple = (1,2,3)

其中有一种情况需要值得我们注意,那就是当元组里只有一个元素时,因为元组定义是使用的小括号,这也与我们算术运算是用小括号容易混淆,所有如果我们要定义的元组只有一个元素时,我们需要在那个元素后面加上一个逗号来告诉解释器这是一个元组。

  元组的操作:

元组的操作是列表操作的缩减版,因为元组一旦创建不能被修改的特性,所以元组中能够使用的方法也就只有统计元素个数的count和索引元素下标的index方法。

Tuple = (1,2,1,1,1,3)
Tuple.index(1) #0
Tuple.count(1) #4

 元组与格式化字符串:

对于我们之前多个变量输出时使用的格式化字符串,其实就使用到了元组的知识。

print("%s,%d"%("e",5))

例如上面的代码,其实后面百分号跟的括号就是一个元组,我们也可以利用一个内容相同的元组的元组名去替换它,所以元组在格式化字符串表示的输出中也有很大用处。

 元组和列表的转换:

元组和列表之间也可以进行互相转换,使用的是它们之间两个函数。元组转换为列表使用list函数,其中以元组名为参数,而列表转化为元组则使用tuple函数,以列表的名为参数。它们转换完后会返回一个内容为被转换对象而类型为要转换类型的返回值。注意,不是参数转换,而是返回一个和参数内容一样的目标类型的返回值

字典(dictionary)

字典的定义:

字典也是一种存储数据的高级变量,它有点类似于C++中的map容器。它的存储方式不是按照顺序来存储的,也就是说它的内存不是连续的一块空间,而是分散的。字典中的每个数据的类型都很特殊,每个数据都是由一个键值对组成,一个键和一个值。键我们可以理解为是数据的代号,值就是我们要保存的数值。键不可以重复,只能唯一指定,而值却可以重复。这就类似于我们的身份证号码和名字。

而字典的定义方式用的是大括号{},里面的每个数值都是由键和值组成的键值对,键和值之间由冒号隔开,每个键值对之间以逗号隔开,并且每个键值对最好只占用一行代码。

dic = {0:"a",
       1:"b",
       2:"c"}
Stu_Info = {"Name":"小明",
            "ID":3121000,
            "Age":19}

 字典的操作:

对于字典的操作我们可以先掌握几个比较常用的操作,字典的操作大部分都是以中括号直接进行修改的。首先来看增加元素,增加元素我们可以直接用中括号定义一个新的键值并且赋值即可,查找和修改元素也很类似,都是通过键找到元素和进行修改即可。

dic = {0:"a",
       1:"b",
       2:"c"}
dic[键]=要修改的值
dic[3]="d"
dic[0] # 就是a

删除操作就比较不同,删除操作使用的是我们在列表中使用过的pop方法,只需在pop里面放置需要删除的键,然后就可以删除掉对应的键值对。

其次就是字典的合并功能,所谓合并,就是指将另外一个字典与已知的字典进行合并,取并集,这里要注意,如果要合并的两个字典有相同的键,那么值内容会覆盖更新

最后字典的遍历也与列表的遍历类似,只不过字典每一次遍历得到的是键的值而已,所以我们可以将临时变量的值放入字典名后的中括号里来进行访问。

 字符串(string)

字符串的定义:

字符串就是一串字符的集合体,它也是一个高级的变量,一般的字符串都是指双引号括起的内容,即我们一般用双引号来定义字符串,但是有时如果字符串内部需要有双引号,那么此时我们需要用单引号来定义字符串。

字符串与其它的高级变量一样,都是可以通过下标的方式来访问到字符串里的每一个内容。

字符串的操作:

类似于我们前面的几个高级变量,字符串内部也有很多方法供我们操作。

 1、计数、索引和获取长度:

这里的获取长度我们用的不是内部的方法,而是函数len,使用方法也是直接传入字符串参数即可获取字符串长度。而索引与计数都是向对应的方法index和count中传入子串来获取子串的位置和出现次数。

string  = "hellohhlloe"
string.index(("ell"))
string.count("e")
len(string)

2、判断类操作:

Python中对于字符串有很多的判断类操作,以is开头的方法都是判断类的操作,在这里我们只列举几个比较常用的判断操作:isspace(判断是否为空字符串)、isascii(是否为ASCII码值(中文就不是))、isupper(字符是否为大写字母)、isdecimal(是否为数字)、isdigit(是否为数字(只不过它的数字还包括Unicode的数字符号))、isnumeric(是否为数字(它可判断比前面两个都要广,它还包括中文字符))、isalpha(是否为字母)、isalnum(是否为字母和数字的组合)

3、字符串对齐:

关于字符串的对齐操作,总结起来有三个:rjust、ljust和center,它们分别表示右对齐、左对齐和中间对齐,使用时直接传递进去要在多宽的范围内对齐的参数,例如要在10格空格范围内对中那么就传递10,因为它默认对齐符号是英文空格,要是我们想改也可以自己在后面再传递一个参数。

4、替换和查找:

关于替换和查找的方法常用的有四个:find、replace、startswith和endswith。其中startswith表示是否以指定的字符串开头,如果是,则返回True,endswith则恰恰相反,判断是否以指定的字符串为结尾。

find与index的功能类似,都是在字符串中查找指定参数的子串的位置,查找到则返回子串的位置。但是与index不同,如果find查找不到,则它会返回-1,不像index会报错。

替换字符串则是用replace方法,它的第一个参数是要被替换的字符串,第二个参数是要替换上去的字符串。这里要注意,replace是不会修改字符串的,它只会返回一个被修改的新字符串,对于原字符串它不会做任何改变。

5、删除空白字符:

 删除空白字符的操作是删除指定的字符串左右两边的空白字符,注意是空白字符不仅仅是空格,空白字符也包括\t、\n等符号,所以这个操作可以用来去除掉一些换行等操作。它也是一个返回操作后字符串的而不改变原字符串的方法!!

6、字符串拆分和连接:

字符串的拆分和连接操作分别是使用到方法splitjoin。其中split表示拆分字符串,它的作用是将一个字符串以某个指定的符号作为分隔符,将字符串拆分成一个小字符串列表。例如有字符串“ab cdef bag”。我们利用split方法以字符b为分隔符,那么将会拆分成一个包含“a”、“cdef”、“ag”三个子串的列表。如果我们不指定以什么符号位分割,那么将会以任意空白符为分割,例如“abc\n eeee\n\t awdadaw”会被拆分成:“abc”、“eeee”、“ awdadaw”。注意,分隔符不保留

 而字符串的连接则使用join方法,这个方法的参数需要是一个元素为字符串列表/元组之类的。然后它会以join前面的字符串为分隔符将子串合并成一个新的字符串。例如"b".join(某个元组),那么就会合并成以b为分割的字符串。

 7、字符串切片:

所谓的字符串切片就是将字符串按顺序挑出一些内容组成新的字符串,它与前面的split不同,split是拆分出一个字符串子串组成的列表,而字符串切片拿到的是一个新的字符串。切片的使用方法是在字符串后面跟上中括号string[N1:N2:Step],第一个N1表示第一刀下去的地方,N2表示结束的地方,Step则表示步长,第一刀后后跟上步长就可以实现按间隔来切片:

 公共方法:

 公共方法指的是能够适用于所有的高级变量的函数、运算符等操作。

公共函数:

公共函数是在不导入工具包的情况下就能够直接被使用的函数,常用的函数包括有len、del、max、min等函数。len函数表示获取当前变量的元素个数;而del可以表示删除指定的容器或容器内的某个元素;而max和min分别用来求出容器内的最大值和最小值,其中在字典里它只会比较键的大小。

公共运算符:

在Python中,对于高级的变量我们也重载了一些和这些变量相对应的运算符,例如+、*等常用的符号。以一个列表为例:列表1+列表2表示将两个列表合并,而列表1 * 整型数字n表示将此列表内的元素重复n次。注意,字典是不可以进行乘操作的,因为字典的键是唯一的;而且还要值得注意的是列表的extend和append操作与列表加号运算符的关系:列表的extend表示追加一个新的列表,而append表示的是追加一个新的元素,这也就表示即使给append传进去一个列表,它也会将这个列表当成自己的一个新元素。而与这两个操作是实质性的改变列表内容不同,加号操作符不会改变列表的内容,而是返回一个新的修改后的新列表。

而关于公共的运算符还有in和not in两个成员运算符,它们用来判断某个元素是否在特定的容器内,例如有一个列表List = [0,1,2,3,4,5,6],那么如果输入 5 in List 它就会返回真,否则返回假。 

for else循环:

对于我们以前用到的for循环来说for else在其基础上在结尾增加了一个条件else,这个条件可以帮助我们判断循环是否完全完成,即如果循环是从头到尾都完成了一遍,那么else就会执行,相反,如果循环在某次循环的中途遇到break而退出了,那么else就不会执行。

未完成循环
完成循环

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】高级变量类型 的相关文章

  • Docker 进程被神秘的“Killed”消息杀死

    在 docker 容器中运行 python 脚本 一切似乎都运行顺利 看到一些 STDOUT 消息 大约 5 分钟后我得到了Killed消息 没有进一步的解释 并且该过程停止 查询数据库可能是磁盘空间问题 也可能是 OOM 问题 我不确定
  • 如何查找 pandas 数据框中连续相同字符串值的计数?

    假设我们有以下 pandas 数据框 df pd DataFrame col1 A gt G C gt T C gt T G gt T C gt T A gt G A gt G A gt G col2 TCT ACA TCA TCA GCT
  • 通过 Python 与 Windows 控制台应用程序交互

    我在 Windows 上使用 python 2 5 我希望通过 Popen 与控制台进程交互 我目前有一小段代码 p Popen console app exe stdin PIPE stdout PIPE issue command 1
  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • 错误只有 size-1 数组可以转换为 Python 标量

    我有这个代码 for a in data X for i in a if not i isdigit x hash i data X column row x row row 1 row 0 column column 1 desired
  • Python中#和"""注释的区别

    开始用 Python 编程 我看到一些带有注释的脚本 and comments 这两种评论方式有什么区别 最好的事情就是阅读PEP 8 Python 代码风格指南 https www python org dev peps pep 0008
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 使用 python 通过搜索端点从 Spotify API 获取曲目

    因此 我尝试使用 API 的搜索端点进行搜索 从而从 Spotify API 获取曲目 请参阅文档 https developer spotify com documentation web api reference search sea
  • 同情因子简单关系

    我在 sympy 中有一个简单的因式分解问题 无法解决 我在 sympy 处理相当复杂的积分方面取得了巨大成功 但我对一些简单的事情感到困惑 如何得到 phi 2 2 phi phi 0 phi 0 2 8 因式分解 phi phi 0 2
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • Python 3.x 中的 PIL ImageTk 等效项

    我正在使用 Tkinter 开发一个应用程序 它使用以下数据库png图标的图像文件 为了在应用程序中使用所述图像 我使用 PIL 打开它们Image open 运行它通过ImageTk PhotoImage函数 然后将其传递给小部件构造函数
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • Docker:通过 Gunicorn 运行 Flask 应用程序 - Worker 超时?表现不佳?

    我正在尝试创建一个用Python Flask编写的新应用程序 由gunicorn运行 然后进行dockerized 我遇到的问题是 docker 容器内的性能非常差 不一致 我最终得到了响应 但我不明白为什么性能会下降 有时我会在日志中看到
  • 指定 Parquet 属性 pyspark

    如何在 PySpark 中指定 Parquet 块大小和页面大小 我到处搜索 但找不到任何有关函数调用或导入库的文档 根据火花用户档案 https mail archives apache org mod mbox spark user 2
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • 如何在 Spyder IDE 中安装 Selenium 包

    我刚刚在工作中安装了 Spyder IDE 仅 Spyder 不是整个 Anaconda 并且希望使用 FireFox 自动化我的工作 我的问题是 如何安装 Selenium 软件包 I figured it out Here is ins
  • 通过套接字发送字符串(python)

    我有两个脚本 Server py 和 Client py 我心中有两个目标 能够从客户端一次又一次地向服务器发送数据 能够将数据从服务器发送到客户端 这是我的 Server py import socket serversocket soc
  • Pandas - 分割大的Excel文件

    我有一个大约有 500 000 行的 Excel 文件 我想将其拆分为多个 Excel 文件 每个文件有 50 000 行 我想用熊猫来做 这样它会是最快和最简单的 有什么想法如何制作吗 感谢您的帮助 假设您的 Excel 文件只有一个 第
  • 在没有numpy的情况下在python中分配变量NaN

    大多数语言都有一个 NaN 常量 您可以使用它为变量分配值 NaN python 可以在不使用 numpy 的情况下做到这一点吗 是的 使用math nan https docs python org 3 library math html
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量

随机推荐

  • vscode链接AutoDL,并使用xtfp7传输文件

    1 AutoDL简介 AutoDL是一个GPU租赁平台 便宜好用 点击下面的链接注册即可 学生邮箱认证有优惠 4090 3090显卡都有还有3060 3080 TITAN Xp等等 AutoDL 品质GPU租用平台 租GPU就上AutoDL
  • 深度图拼接

    度量变换 图像拼接 检测深度图 国科大图像处理实验 度量变换 图像拼接 检测深度图 国科大图像处理实验 Root dobby的博客 CSDN博客 问题描述 目录hw3下有立体视觉对应的两幅图像view1 png和view5 png 图像来源
  • 家用电脑可以用做服务器吗

    家用电脑的结构与服务器的结构是相同的 家用电脑是可以用来搭建服务器使用 但使用家用电脑做服务器在稳定性会比服务器差很多 1 家用电脑没有公网IP 网络运营商分配的IP重启路由之后是会变化 不固定 服务器运行是需要有固定IP让人连接访问 使用
  • Ngui 五种点击事件实现方式

    ngui作为unity界面插件之一中 无疑是最好用 使用最多的了从自学unity到现在界面一直使用它 由于它的持续更新 我在此不得不说 确实很为开发者作想 为什么这么讲呢 大概在去年吧 当时用的那个版本已经不记得了 反正就是有个需求 要实现
  • HTC相关开发所需SDK等工具都在这里了

    HTC相关开发所需SDK等工具都在这里了 转 OpenVR SDKhttps github com ValveSoftware openvr OpenVR SDK是由原本的SteamWorks SDK更新而来 新增对HTC VIVE开发者版
  • 时间格式转换LongToString

    import java util Calendar import java util Date import org apache commons lang3 StringUtils import org apache commons la
  • 3.Qt消息机制和事件

    9 Qt消息机制和事件 好文来自https www cnblogs com weizhixiang p 5824345 html 一 事件 鼠标 敲下键盘 或者是窗口需要重新绘制的时候 都会发出一个相应的事件 Qt 程序需要在main 函数
  • 人工智能在游戏开发中的应用:你目前所需的 6 大 AI 工具

    游戏体量越大 质量越高 所要求的标准就越严格 尤其是在 AAA 级游戏市场 任何失误都可能导致你陷入极其棘手的境地 影响玩家体验 进而招致恶评 随着对游戏的需求和预期不断攀升 游戏开发人员比以往任何时候都需要更多帮助 那么 他们如何才能紧跟
  • Consumer位移管理-Kafka从入门到精通(十一)

    上篇文章说了 sesstion time out max poll interval ms max poll records和auto offset reset等参数 KafkaConsumer Kafka从入门到精通 十 https bl
  • eclipse如何创建多层包(多级包)

    包是Java中一个非常重要的概念 实质上包就是一个文件夹 我们在每次创建工程之前 要将不同的类放在不同的包里 以方便管理和避免类名重复所带来的麻烦 以后在使用其他包的类时 只需要使用 import 关键字进行包含就可以了 那么 在eclip
  • HTTPS 证书认证具体流程

  • Appium自动化框架从0到1之 日志文件配置(log.conf)

    在config文件中 我们先把log的输出格式 输出路径等参数抽离出来作为一个配置表 这个写法 在selenium自动化框架中 是没有分离的 所以 我们有get到一个新方法 代码如下 log conf loggers keys root i
  • C#中Console.WriteLine()的用法

    C 中Console WriteLine 的用法 以前用Console WriteLine 的时候就只会用它直接输出string字符串 但后来发现它还有其它在有些场合下会十分方便的输出方法 这篇就记录一下这些方法的使用吧 代码格式我就不写了
  • 向HashSet中添加元素的过程:

    向HashSet中添加元素的过程 1 当向 HashSet 集合中存入一个元素时 HashSet 会调用该对象的 hashCode 方法来得到该对象的 hashCode 值 然后根据 hashCode 值 通过某种散列函数决定该对象在 Ha
  • 微信小程序实战八:优惠券页面的实现

    文章目录 1 效果预览 2 wxml布局 3 js逻辑 4 样式设置 1 效果预览 2 wxml布局 顶部tab切换
  • cucumber ,运行feature一直提示 Undefined step: Given login baidu

    Undefined step Given login baidu You can implement missing steps with the snippets below Given login baidu public void l
  • 软件测试员必知!压力测试总共需要几个步骤?思路总结篇

    在运维工作中 压力测试是一项很重要的工作 比如在一个网站上线之前 能承受多大访问量 在大访问量情况下性能怎样 这些数据指标好坏将会直接影响用户体验 今天我们就来深入了解下压力测试 首先 什么是压力测试 软件压力测试是一种基本的质量保证行为
  • Python 实现 RAS 加解密(ras模块,pycrypto模块)

    一 pycrypto pycryptodome模块 1 模块安装说明 crypto这个模块的安装有点小坑 需要注意 crypto pycrypto pycryptodome的功能是一样的 crypto与pycrypto已经没有维护了 所以
  • uni-app开发微信小程序,textarea组件宽度设置,解决超出父级div

    问题描述 当我们使用textarea组件时 会出现设置宽度100 但其超出了父级Div 如下图 解决方案 添加box sizing border box 属性 即可完美解决 属性定义及使用说明 box sizing 属性定义如何计算一个元素
  • 【Python】高级变量类型

    目录 列表 List 编辑列表定义与结构 编辑列表的操作 元组 Tuple 编辑元组的定义 编辑元组的操作 编辑元组与格式化字符串 编辑元组和列表的转换 字典 dictionary 编辑字典的定义 编辑字典的操作 字符串 string 编辑