Python六大核心数据类型及其常用操作详解

文章目录

  • 一、数字(number)
  • 整型
  • 浮点型
  • 布尔型
  • 复数
  • 运算
  • 二、字符串(string)
  • 字符串的索引
  • 字符串的切片
  • 字符串的常用操作
  • 列表(list)
  • 列表的索引
  • 列表的常用操作(注意列表的大部分函数不是输出,而是直接修改原列表,即在print中输出None)
  • 元组(tuple)
  • 元组的索引
  • 元组的常用操作
  • 字典(dictionary)
  • 字典的索引
  • 字典的常见操作
  • 集合(set)
  • 集合的常见操作
  • 深拷贝和浅拷贝
  • python一共有六大数据类型,即数字,字符串,列表,元组,字典,集合;此篇文章将介绍这六种数据类型及其基本操作

    一、数字(number)

    数字类型包括整型(int),浮点型(float),布尔型(bool),复数型(complex)

    整型

    只能存储整数,可以用int(变量)函数将可转为整型的数据强行转为整型,包括浮点型(强转后直接抹去小数部分)和纯数字构成的字符串(如"123"转为123),占位符为%d

    浮点型

    可以存储整数和小数,有普通表示形式(%f,默认保留六位小数,可用 %0.bf 形式控制输出保留b位小数)和科学计数法(%e,输出如2.5e-2,e后面表示10的次方),用float(变量)函数强转

    布尔型

    输出的为True或False,True的值为1,False的值为0,可以用bool(变量)将数字强转为布尔型,值为0转为False,非0转为True

    复数

    用z=complex(a,b)的形式创建z=a+bi的复数,real(z)返回实部,imag(z)返回虚部

    运算

    符号 意义
    a+b a+b
    a-b a-b
    a*b a×b
    a/b a÷b,可为小数
    a//b a整除b,结果为整数抹去小数
    a%b a整除b所得的余数
    a**b a的b次方

    二、字符串(string)

    常字符串的表现形式是用一对单或双引号括起,如"abc",多行字符串用一对"""括起,如

    """
    123
    abc
    """
    

    用str(变量)强转为字符串类型
    下用str来表示字符串变量

    字符串的索引

    字符串用下标索引,可以把字符串看做一串字符从头开始从0开始依次编号,str[i]输出字符串第i位字符,可以取负数编号,意为从后往前倒序,如

    str="abcdef"
    print(str[0]) #输出第0位字符,即a
    print(str[-1]) #输出倒数第一位字符,即f
    

    当下标超出字符串的编号时会报错

    字符串的切片

    str[开始下标:结尾下标:步长]在开始到结尾的范围内(开始下标取到,结尾下标取不到),从开始下标起输出第一个字符,向后数,每经过一个步长输出下一个字符,直到达到结尾下标;步长若省略默认为1,;可以取负数编号;如

    str="abcdef"
    print(str[0:4:2]) #输出从str[0]到str[4](取不到)每隔2步长的字符,即ac
    print(str[-3:-1]) #输出从str[-3]到str[-1](取不到)的字符(步长默认1),即de
    

    字符串的常用操作

    合并:str1+str2,输出将str2接在str1末尾形成的字符串
    复制:str*a,输出str复制a遍形成的字符串
    检索:(1)str.find(子串,开始下标,结束下标)在开始下标到结束下标之间检索子串,检索存在则输出子串第一次出现时头字符的下标,不存在则输出-1;
    (2)str.index(子串,开始下标,结束下标)基本同find(),区别是不存在会报错;
    (3)子串 in str子串 not in str,判断子串在/不在str中,输出为布尔型(True or False);
    (4)str.count(子列,开始下标,结束下标),返回子串出现的次数;
    (5) len(str)输出字符串长度
    修改:(1)str.replace(旧子串,新子串,替换次数),将str中的旧子串按出现顺序替换为新子串,省略次数默认全部替换,返回修改后的字符串;
    (2)str.split(子串,分割次数),检索子串并将字符串从子串两侧分开,返回一个字符串列表;
    (3)str.capitalize()第一个字母大写,str.upper()小写转大写,str.lower()大写转小写,str.title()单词首字母大写,返回修改后的字符串
    判断:str.startswith(字符)判断是否以某字符开始,str.endswith(字符)判断是否以某字符结尾;str.islower/isupper/isdigit()判断字符串是否都是小写/大写/数字,返回布尔型
    遍历:可以用for i in str遍历字符串,i表示遍历时指向的字符

    列表(list)

    列表是一系列有序的元素,用一对中括号[ ]括起,元素之间用逗号隔开,元素类型不限,可以是数字字符串,元组字典集合,甚至是列表,如

    li1=[] #定义空列表
    li=[1,"abc",(x,y),{"key":"value"},{'d','e','f'},[1,2,3]}
    

    list(变量)将变量强转为列表类型
    下用li表示列表类型变量

    列表的索引

    列表采用下标索引,和字符串类似(元组的索引也类似),列表从0开始为其中元素依次编号,复数表示倒序,li[i]输出第i位元素,对列表中的序列型元素(列表、元组、字典)可以用li[i][j]索引列表第i位的序列元素中的第j位数据

    列表的常用操作(注意列表的大部分函数不是输出,而是直接修改原列表,即在print中输出None)

    添加:(1)直接用+合并列表,即list=li1+li2li1+=li2
    (2)li.insert(下标,元素)在该下标前插入一个元素,后面的元素下标依次后移;
    (3)li.append(元素)在末尾追加元素,不限类型;
    (4)li.extend(元素)在末尾末尾追加元素,但会将可迭代对象(即可以从中再取出下属数据的,如列表、元组、字典、集合是可迭代对象)拆成单个元素加入列表;
    (5)li[i:i]=[列表元素]在下标i之前插入所有列表元素;
    (6)复制用li*a,输出将列表元素复制a次后形成的新列表;
    修改元素:通过下标访问li[i]=新元素li[起始下标:终止下标:步长]=新元素按步长长度依次将下标指向的元素修改为新元素;
    删除:(1)del li删除整个列表,del li[i]del li[i:j]删除下标指向的元素;
    (2)li.pop(下标)删除下标元素,没有下标默认最后一位,输出删除的元素;
    (3)li.remove(元素)根据元素来删除,只删除第一个出现的元素,输出删除的元素,无则报错;
    (4)li.clear()删除所有元素,原列表变成空列表[ ];
    查找:(1)元素 in/not in li,输出布尔型;
    (2)li.count(元素),统计出现次数;
    (3)li.index(元素),返回下标,无则报错;
    (4)len(li)输出元素个数;
    排序:(1)li.reverse()列表倒置
    (2)li.sort()升序排列,li.sort(reverse=True)降序排列;
    (3)sorted(li)输出升序列表,不改变原列表;
    遍历:for i in li遍历列表,i表示遍历时指向的元素
    列表推导式:[变量表达式 for 变量 in li]新列表对原列表的每一个元素执行表达式得出,li可以是列表、range()等可迭代数据(可从中遍历数据),如

    li1=[1,2,3] #
    li2=[i*2 for i in li1] #或 li2=[i*2 for i in range(1,3)]
    print(li2) #输出[2,4,6]
    

    元组(tuple)

    元组是一系列有序数据,用一对小括号( )括起,数据间用逗号隔开,定义单个数据的元组末尾要加逗号(x , ),数据类型不限,如

    tu1=(1,) #定义单个数据的元组
    tu2=(1,"abc",[1,2,3]) #定义多个数据的元组
    

    元组不可修改,可用于构建只读数据;
    用tuple(变量)强转为元组类型;

    元组的索引

    元组索引与列表类似,数据用下标索引,即tu[i];元组数据不可修改,但元组中的列表、字典、集合里的数据可以修改,用下标序列tu[i][j]进行索引和修改

    元组的常用操作

    查找:(1)tu.index(数据),返回下标,无则报错;
    (2)tu.count(数据),返回出现次数;
    (3)len(tu)统计数据个数;
    (4)数据 in/not in tu,输出布尔型;
    复制用tu*次数; 合并用tu=t1+t2;

    字典(dictionary)

    字典是一种映射类型,用大括号{}括起或用dict定义,其中元素以键值对形式{key:value}出现,键和值一一对应,键值对之间用逗号分隔,键(key)必须是不可变类型(数字、字符串、元组)且不可重复,如

    dict1={}
    dict2=dict() #定义空字典用{}或dict()
    dict3={"name":"jack","age":18,"grade":["A","C","B"]}
    

    字典的强转对象必须是以元组对(key:value)为元素的列表,可以用d=zip(lista,listb)将两个列表打包成一个(ai,bi)的元组列表,对应关系截止到短列表的长度,再用dict(d)强转成字典;
    下用dict表示字典类型

    字典的索引

    字典用键(key)来索引,即dict[key]输出对应的值

    字典的常见操作

    修改/增加:dict[key]=value有则修改无则增加;
    删除:del dict[key]删除对应键值对;clear(dict)清空字典;
    查找:(1)len(dict)统计键值对个数;
    (2)dict.keys()返回所有键列表;
    (3)dict.values()返回所有值列表;
    (4)dict.items()返回所有(键,值)列表;
    (5)键 in/not in dict.keys(),值 in/not in dict.values()键,值 in/not in dict.items(),返回布尔型;
    遍历:用上文三个列表遍历for i in dict.keys()for i in dict.value()for key,value in dict.items()
    字典推导式:{i:i*2 for i in list}

    集合(set)

    集合是无序不重复序列,用{}或set()函数创建,后者可创建空集合,如

    set1=set()
    set2={"abc",[1,2,3],1}
    

    用set()强转成集合类型;
    下用set表示集合变量;
    集合不可索引

    集合的常见操作

    增加:(1)set.add(数据),用来添加不可迭代对象,重复则不添加;
    (2)set.update(数据),只能用来追加可迭代对象(即可以从中再取出数据的,如列表、元组、字典、集合是可迭代对象),自动将其拆分出下属数据加入集合并去重,其中对字典只加入key,如

    set={1}
    dict={11:22,33:44}
    tu=(a,b,c)
    set.update(dict)
    print(set) #输出{1,11,33}
    set.update(tu)
    print(set) #输出{1,11,33,a,b,c}
    

    删除:(1)set.remove(数据),无则报错;
    (2)set.discard(数据),不存在不报错;
    (3)set.pop()随机删除数据,返回删除的数据;
    交集:set=s1&s2,取交集;并集:set=s1|s2,取并集;
    ##可变对象和不可变对象
    六大数据类型可分为两类,可变对象和不可变对象
    可变对象:存储的数据可以在原地址修改;不可变对象:存储的数据不可修改,修改值时实际上是修改引用的地址,如

    #不可变对象
    a=10 #将10赋值给a,即a引用值为10的地址
    print(id(a)) #查看a的地址,如此处输出的是140737193382448
    a=11 #将11赋值给a,即此时a引用值为11的地址
    print(id(a)) #查看此时a的地址,如此处输出的是140737193382480,地址改变
    

    大致是这个意思
    不可变对象有:数字,字符串,元组;可变对象有:列表,字典,集合

    深拷贝和浅拷贝

    在python中使用 a=b 的赋值操作时实际上是将 b 的地址引用给 a ,即 a,b 共用一个地址,因此对不可变对象,修改 a 时 b 也会改变;对可变对象,修改 a 时实际上是修改引用给 a 的地址
    想要修改 a 而不影响 b,需要创建 a 的一个拷贝。拷贝可以是浅拷贝或深拷贝:
    浅拷贝(shallow copy)创建一个新对象,但它填充的仍然是对原始对象内容的引用(适用于对象中包含的是不可变类型);
    深拷贝(deep copy)创建一个新对象,并且递归地复制原对象中的所有子对象。因此,新对象与原对象完全独立,如

    import copy #使用copy模块进行深拷贝
    a=[1,2,3]
    b=copy.deepcopy(a)
    a.append(4)
    print(a) #输出[1,2,3,4]
    print(b) #输出[1,2,3]
    

    可以用 is 运算符判断是否为浅拷贝(两个变量是否指向同一个量)a is b 返回布尔型

    作者:陈卿然

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python六大核心数据类型及其常用操作详解

    发表回复