> 文档中心 > 一篇快速入门Python基础数据类型

一篇快速入门Python基础数据类型


Python常见的数据类型和方法都有哪些?

Python的数据类型可以划分为不可变数据类型可变数据类型可变数据类型和不可变数据类型的区别是什么?什么叫做可变/不可变的数据类型。下面通过一些实例来对这个概念进行解释:

注意(观察内存地址的变化

示例1:字符串

#对字符串进行替换操作

输出结果

通过输出结果,我们可以看出对字符串s1进行替换操作,不会影响字符串s1本身,而是形成了新的字符串,新的字符串为 s1.replace('zjk','china')

示例2:列表

#对列表进行增加操作

通过输出结果呢,我们可以看出对列表进行增添操作,其列表本身会发生变化,列表l1最终变成了[1,2,3,4,5,6],并没有生成新的列表。

结论:上述分析可知,所谓不可变数据类型,在于无论你对其进行什么操作,都会重新创建一个新的,例如如果你对字符串中的元素进行操作,就会重新生成新的字符串,但是原来的字符串本身不受影响。反之,对于可变数据类型而言,对其进行的任何操作,都是自原先基础上进行,并不会生成新的。

不可变数据类型和可变数据类型分别包含哪些数据类型?

不可变数据类型:

int型(数字)

数字类型较为简单,这里不做介绍.

布尔值(bool)

True 真

False 假

关于布尔值,这里我们需要知道几个类型转换

1:字符串类型如何转换成布尔值型,非空字符串转换成bool型为True,空字符串转换为bool型为False

2:数字类型如何转换成布尔值型,数字0转换成bool型为False,非零数字转换成bool型为True

元组(tuple)

元组,称为不可修改列表,也叫只读列表,里面的元素不可以进行修改,因而往往一些很重要的数据,会以元组的形式进行存储。即:可以被查询(循环查询,切片),但是不可更改。

示例1:

zjk = ('hehe','xupt',1,[1,'ez'],6)zjk[0].replace('h','2')print(zjk)输出结果:('hehe', 'xupt', 1, [1, 'ez'], 6)1:可查询:示例:tu = (1,2,3,"alex",[2,3,4,5,'taibai'],'hehe')#根据索引查询print(tu[3]) 输出结果:alex #切片查询print(tu[0:4])输出结果(1, 2, 3, 'alex')#循环查询for i in tu:    print(i)输出结果:123alex[2, 3, 4, 5, 'taibai']hehe

****输出结果,证明确实无法对元组的元素进行修改。

这里也涉及到一个问题,加入元组里面的元素是一个不为空的列表,那么列表中的元素可以进行修改么?

下面我们通过示例,对上述问题进行解答:

tu = (1,2,3,"alex",[2,3,4,5,'taibai'],'hehe')tu[4][3] = "travel" #替换列表元素print(tu)tu[4].append('summar') #列表增加元素print(tu)输出结果:(1, 2, 3, 'alex', [2, 3, 4, 'travel', 'taibai'], 'hehe')(1, 2, 3, 'alex', [2, 3, 4, 5, 'taibai', 'summar'], 'hehe')

我们发现可以对元组里面列表中的元素进行修改。

结论:假如将元组的元素比作儿子,列表中的元素即为孙子,对于元组而言,也就是儿子不能修改,但是孙子可以进行修改。

元组常用的方法就是公用的方法:len()计算其长度,切片操作,循环取值按照元素的索引进行查询

zjk = ('hehe','xupt',1,[1,'ez'],6,1)#计算长度print(len(zjk))输出结果:6#计算某一个元素出现的个数(频率统计)print(zjk.count(1))输出结果:2

查找某一元素的索引  .index()方法

zjk = ('hehe','xupt',1,[1,'ez'],6,1)print(zjk.index(6))输出结果:4

字符串(str)

字符串,元组,列表,字典都拥有的公共方法如下所示,我们接下来对于公共方法就不在举例了

1:len()计算其长度, :2: 切片操作,   :3:循环取值, :4:按照元素的索引进行查询。5,计算某个元素出现的次数

------------------------------------------------

常用方法总结图:

公共方法:

s1 = 'zJkXuPT123'print(len(s1))  #计算长度  len输出结果:10print(s1[0])   #按照索引取值输出结果:zprint(s1[1:3])  #可切片操作 输出结果:Jkfor i in s1:     #循环取值    print(i)输出结果:zJkXuPT123#统计字符串中出现的个数:count  可切片操作s1 = 'zJkXuPTzux123'print(s1.count("z"))  #统计字符串中‘z’的个数print(s1.count("z",0,-1))  切片出字符串中 在统计其个数print(s1.count("z",0,3))输出结果:221

注:方法中包含 start=None ,end=None  可切片

其他 

字母大小写,大小写翻转等

s1 = 'zJkXuPT123'#首字母大写print(s1.capitalize())输出结果:Zjkxupt123#全部大写print(s1.upper())输出结果:ZJKXUPT123#全部小写print(s1.lower())输出结果:zjkxupt123#大小写翻转print(s1.swapcase())输出结果:ZjKxUpt123#每个隔开(特殊字符或数字隔开)  单次首字母大写s = 'alex xupt zjk's1 = 'alex*xupt*zjk's4 = s.title()s5 = s1.title()print(s4)print(s5)输出结果:Alex Xupt ZjkAlex*Xupt*Zjk

示例:(在验证码校验的时候可能会遇到上述大小写转换的方法)

#验证码s_str = 'acEQ'you_input = input("输入验证码,不区分大小写")if s_str.upper() == you_input.upper():    print("验证成功")else:    print('重新输入')

*判断字符串前三位是不是由什么组成的(以什么开头?或者结尾)*

s1 = 'Zjkxupt123polo'#以什么开头.statewith()print(s1.startswith('Z'))  #以什么结尾.endwith() print(s1.endswith("o"))输出结果:TrueTrue

关于.startwith(),以及endwith()方法说明:

显然支持切片操作:对字符串进行截取之后,在进行判断。

s1 = "ella,sline python"s2 = "python"print(s1.endswith(s2,2))#输出结果:Trues1 = 'alexWusir's2 = s1.startswith('e',2,5)  #  截取后的字符串exW是不是以e开头print(s2)#输出结果:True

#####字符串转换成列表

#split  按照你规定的字符分割成列表s = 'alex Wusir taibai'l = s.split()  #默认空格print(l)输出结果: ['alex', 'Wusir', 'taibai']s = 'alex*Wusir*taibai'l = s.split("*")print(l)输出结果:['alex', 'Wusir', 'taibai']s = 'alex*Wusir*taibai'l = s.split("a")print(l)输出结果:['', 'lex*Wusir*t', 'ib', 'i']

#查找某一个元素所对应的索引。  返回元素下标(索引)

s = 'alex*Wusir*taibai's1 = s.find('t')s2 = s.index('i')  #有重复元素,返回首次出现的索引print(s1)print(s2)运行结果:118

find和index都是通过元素找索引,两个有什么区别?

相同点:均支持切片操作

s = 'alex*Wusir*taibai's1 = s.find('a',2,-1)s2 = s.index('i',9,-1)print(s1)print(s2)输出结果:1213

不同点:find找不到会返回-1,index找不到元素会报错,一般推荐用find方法

s = 'alex*Wusir*taibai's1 = s.find('h')print(s1)# print(s2)输出结果:-1s = 'alex*Wusir*taibai's2 = s.index('h')print(s2)  报错:输出结果:    s2 = s.index('h')ValueError: substring not found

#替换操作

s = "会计,客户,会计"s1 = s.replace("会计",'EDG')  #默认情况会全代替  前面参数代表旧的字符串,后面代表新的print(s1)输出结果:EDG,客户,EDGs1 = s.replace("会计",'EDG',1)  #仅仅代替第一个输出结果:EDG,客户,会计#注:def replace(self,old,new,count=None)   替换次数

#  strip,rstrip从右删),lstrp从左删   方法 (删除空格)

s = '    alexWusdir    's1 = s.strip()  #默认删除前后空格print(s)print(s1)输出结果:  alexWusdir    alexWusdirs = '*alexWusdir%'s1 = s.strip("%*")  print(s)print(s1)输出结果:*alexWusdir%alexWusdirs = '    alexWusdir    's1 = s.lstrip()s2 = s.rstrip()print(s1)print(s2)  输出结果:alexWusdir alexWusdir

#填充 center  居中空白填充

s = 'alexWusir's1 = s.center(20)s2 = s.center(20,'*')print(s1)print(s2)输出结果:     alexWusir      *****alexWusir******

#formate

#is 系列

name = 'jinxin124'print(name.isalnum())   #字符由字母和数字组成print(name.isalpha())  #字符串只有字母组成print(name.isdigit())  #字符串只由数字组成输出结果:TrueFalseFalsename = 'jinxin传统124'if '传统' in  name:    print('666')

目录

Python常见的数据类型和方法都有哪些?

不可变数据类型和可变数据类型分别包含哪些数据类型?

不可变数据类型:

int型(数字)

布尔值(bool)

元组(tuple)

字符串(str)

可变数据类型

列表(list)

字典(dict)

集合(set)


可变数据类型

列表(list)

常用方法总结图:

字符串,元组,列表,字典都拥有的公共方法如下所示,我们接下来对于公共方法就不在举例了

l = [1,2,3,4,5,6]

1:len()计算其长度, :2: 切片操作,   :3:循环, :4:按照元素的索引进行查询。5,计算某个元素出现的次数l.count()

#列表的增删改查

#01列表的增加

----

insert方法按照位置去插入,里面涉及两个参数,第一个参数是元素要插入的位置(索引),第二个参数是你要插入的元素。

---

extend 迭代的进行添加

注意的是extend方法里面的参数必须是可迭代的,哪有人就会有疑问到底什么事可迭代的,反正你记住Int类的是不可迭代的

,如果你extend里面的参数是数字的话,那么就会出现下面的错误。即,extend里面的参数不能是int型。

#02列表的删除操作:包含两个,第一 pop方法按照索引(位置去删除),第二个  remove按照元素去删除.

pop方法

pop方法中如果没有参数,那么会默认删除最后一个元素,l.pop(3)的意思是删除列表中索引为3的元素。

-----

remove方法

值得注意的点:

在实际的开发应用中,我们有时并不知道要从列表中删除的值所对应的位置,也就是你只知道要删除的元素是什么,但是元素处于什么位置,你并不知道,这个时候,适合用remove方法去实现删除功能。

# 清空列表 clear方法

#删除列表,del

我在学习的过程中,曾经混淆了,删除和清空的概念,清空的意思是,将列表中的元素进行清空,返回的是一个空列表,但是删除列表的话,是相当于没有了,因此返回的结果只能是列表没有定义,两个概念,要记得区分。

除此之外呢:del方法可以按照切片去删除某个或某段元素。

示例:

#03 列表的改操作 

将某个元素直接进行赋值,实现了改的操作

按照切片去改  进行拆分之后,迭代的去添加

04:列表的查找操作:

按照索引查找单个元素,index方法,里面参数为索引

---------------------

最重要的是要学会  按照切片的方式去查找

示例:只想查找列表前三个元素怎么办??

# 05 列表的反转------------- reverse方法:

#06 列表是有序的,也就是里面的元素可以进行排序  sort方法

sort默认是按照升序的方法排序,如果你想从大到小,降序输出怎么办?我们只需要改一下参数

关于排序,我们有的时候需要排序,但是同样需要排序之后,又能保持原有的顺序,这个时候sorted更好。

#列表是可以嵌套的,也就是列表里面继续嵌套列表

示例:如何查找出元素‘c’

关于列表嵌套,按照索引找到这个嵌套,如果是字符串按照字符串的方法对其进行操作。

# 07   列表如何转换成字符串??? join方法

l = ['zjk','dsb','ymj','ez']s = ','.join(l)s1 = ''.join(l)  #无缝拼接print(s)print(s1)输出结果:zjk,dsb,ymj,ezzjkdsbymjez

*******列表相加

#需求:添加10个新名字,添加到原有的员工列表中#将新名字弄成一个新列表,然后原列表+新列表l = [1,2,3,4]l2 = ["libnai",'sheneos','jsjsjs']print(l+l2)输出结果:[1, 2, 3, 4, 'libnai', 'sheneos', 'jsjsjs']#

----------------------------------------

列表完结篇:

列表和元组到底有什么区别??

相同点:都可以按照索引去查找元素

不同点:列表是可变数据类型,元组是不可变数据类型,与列表相比元组的内存更小,当拥有大量元素的时候,元组要比列表快。

----------------------

字典(dict)--字典的键必须是不可变数据类型,值可以是任意数据类型

字典主要用于存放大量的关系型数据,

常用方法总结图

# 01 字典的增加操作------------- 直接赋值或者是setdefault

直接赋值:有就覆盖,没有就添加到字典后面

setdefault:如果字典有那就不变,没有就添加

#02 字典的删除操作----------pop方法  popitem方法

pop方法有返回值,按键去删除,字典的键其实就相当于是列表的索引

popitem方法 随机删除,有返回值,返回值是元组,元组里面是删除的键值

在调用pop方法的时候,如果你删除的这个键值对,字典里面没有怎么办??答案是  会报错

但是我们可以在pop第二个参数设置返回值。

#03 清空字典----------clear方法

#03-1 删除字典-------------del方法

#04 字典的改操作-----------直接赋值或者update方法

将dic1中的所有键值对更新到dic2中,所谓更新的意思,就是有就覆盖,没有就添加

#05 字典的查操作------------按照键进行查找,遍历字典循环

字典的键就是列表的索引,按照键查询相当于按照索引去查询。

dic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}print(dic1.keys(),type(dic1.keys()))print(dic1.values(),type(dic1.values()))print(dic1.items(),type(dic1.items()))"""输出结果:dict_keys(['age', 'name', 'sex', 'home'])   列表dict_values([18, 'jin', 'male', 'zjk'])   列表dict_items([('age', 18), ('name', 'jin'), ('sex', 'male'), ('home', 'zjk')])   列表  元素是元组 元组里面是键值对"""

循环字典取值: 写字典名字 默认打印键

dic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}# print(dic1.keys(),type(dic1.keys()))# print(dic1.values(),type(dic1.values()))# print(dic1.items(),type(dic1.items()))for i in dic1:    print(i)#输出结果:agenamesexhomedic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}for i in dic1.keys():  #只打印键    print(i)#输出结果:agenamesexhomefor i in dic1.values():  #只打印值     print(i)#输出结果:18jinmalezjkfor i in dic1.items():   #得到列表,列表里面的元素是元组,随意这循环以后是元组,里面是键值    print(i)##输出结果('age', 18)('name', 'jin')('sex', 'male')('home', 'zjk')dic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}for i,k in dic1.items():    print(i,k)#输出结果:age 18name jinsex malehome zjk

注:关于查询  查询的键没有怎么办??

场景:假如想从一个字典中获取一个键值对,但是并不知道是否字典中存在这个键值对,所以尽量用get  

  get用法与之前pop方法差不多,加入没有此键能够防止报错,要比直接拿着索引去查,报错要强。

dic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}print(dic1.get('hehe'))#输出:Nonedic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}print(dic1['hehe'])#输出:报错  KeyError: 'hehe'dic1 = {'age':18,'name':'jin','sex':'male','home':'zjk'}print(dic1.get('hehe','没有这个键'))# 输出结果  没有这个键

#06 字典的嵌套--------考虑字典里面嵌套列表的情况

集合(set)(元素去重必备)

字符串,元组,列表,字典都拥有的公共方法如下所示,我们接下来对于公共方法就不在举例了

1:len()计算其长度, :2: 切片操作,   :3:循环, :4:按照元素的索引进行查询。5,计算某个元素出现的次数

集合最重要的就是去重

示例:列表中的元素有重复的元素,怎么办

补充:复数类型:

关于python复数类型

a = 123 - 12jprint(a.real)print(a.imag)输出结果:123.0-12.0(1)表示复数的语法是real+imagej(2) 实部和虚部都是浮点数(3)虚部的后缀可以是“j”或“J”(4)复数conjugate 方法可以返回该复数的共轭复数