python数据类型总结
1、python的数据类型
基本的数据类型:数字型、字符串、元祖、列表、字典、集合
不可变数据类型:数字型、字符串、元祖
可变数据类型:列表、字典、集合
1.1 数字型(number)
数字类型 在 Pyhton 中非常常见,经常用于数字之间的运算、大小比较、条件判断等等。
数字类型包括:整型、浮点型、复数型、布尔型。其中布尔型属于特殊的数字类型。
1)整型(int)
- 在数字中,正整数、0、负整数都称为整型。
- 使用type()获取数据类型
- 使用id()获取内存地址
- 整数运算就是包括加、减、乘、除、模、幂等等运算方式
# 加法
# 减法
# 乘法
# 除法(浮点数)
# 整除(整数)
# 模
# 幂
# 取余
- int()函数:该函数用来将一个实数或字符串转换成整型,如果函数内没有传入任何参数,则返回 0。
2)浮点型(float)
- 浮点数有两种表示形式:正常形式(带小数点)和科学记数法。
- 浮点数运算
- 浮点型和整型运算会得到浮点型。
- 浮点型和浮点型计算显然会得到浮点型。
- float() 函数:该函数用来将一个实数或字符串转换成浮点型,如果函数内没有传入任何参数,则返回 0.0。
3)复数型 complex
- 两部分组成:实数部分和虚数部分,表现形式为: a+bj (Python中用 j 来表示虚数部分)。复数在普通项目中是用不到的,但是在工程领域的一些项目使用较多。
- 复数的运算:复数型可以与复数、浮点数、整数进行正常运算,都会得到一个复数
a = 3 + 2j
b = 5 + 2j
print(a - b, type(a - b)) # 输出(-2+0j) <class 'complex'>
print(a * b, type(a * b)) # 输出(11+16j) <class 'complex'>
- complex() 函数:该函数可以传入两个参数,real 表示一个复数的实部,imag 表示复数的虚部系数。
4)布尔型(bool)
- 布尔值在 Python 中主要用来做判断的依据。比如条件判断 “if” 和循环 “while” 都会用到布尔值。
- 布尔型在 Python 中只有两个值,分别为 True 和 False
- 在做条件时,发现非 0 数都会被解释器认为 True
- 布尔类型适合做逻辑运算
1.1.1数学函数
1)abs–绝对值
2)round(x,[n]). 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。
1.2 字符串(string)
1:认识字符串
字符串的本质是:字符序列。Python 的字符串是不可变的,我们无法对原字符串做任
何修改。
- Python3 直接支持 Unicode,可以表示世界上任何书面语言的字符。Python3 的字符默认就是 16 位 Unicode 编码,ASCII 码是 Unicode 编码的子集。
使用内置函数 ord()可以把字符转换成对应的 Unicode 码;
使用内置函数 chr()可以把十进制数字转换成对应的字符。
>>> ord('A')
65
>>> ord('高')
39640
>>> chr(66)
'B'
- 可以通过单引号或双引号创建字符串,连续三个单引号或三个双引号,可以帮助我们创建多行字符串
- Python 允许空字符串的存在,不包含任何字符且长度为 0。
- len()用于计算字符串含有多少字符。
2:字符串的用法
1)字符串拼接
可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ >’aabb’。
(1) 如果+两边都是字符串,则拼接。
(2) 如果+两边都是数字,则加法运算。
(3) 如果+两边类型不同,则抛出异常。
可以将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’>’aabb’
【操作】字符串拼接操作
>>> a = 'sxt'+'gaoqi'
>>> a
'sxtgaoqi'
>>> b = 'sxt''gaoqi'
>>> b
'sxtgaoqi'
2)字符串复制
使用*可以实现字符串复制。
【操作】字符串复制操作
>>> a = 'Sxt'*3
>>> a
'SxtSxtSxt'
3)不换行打印
我们前面调用 print 时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行符。我们可以自己通过参数 end = “任意字符串”。实现末尾添加任何内容:
print("sxt",end=' ')
print("sxt",end='##')
print("sxt")
-----------------------------------
运行结果:
sxt sxt##sxt
4)从控制台读取字符串:可以使用 input()从控制台读取键盘输入的内容。
5)str()实现数字转型字符串
当我们调用 print()函数时,解释器自动调用了 str()将非字符串的对象转成了字符串。
6)使用[]提取字符
正向搜索:最左侧第一个字符,偏移量是 0,第二个偏移量是 1,以此类推。直到 len(str)-1
反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)
反向字符串:也可以直接使用 [::-1] 进行索引:
my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]
7)replace()实现字符串替换
整个过程中,实际上我们是创建了新的字符串对象,并指向了变量 a,而不是修改了以前的字符串。
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('c','高')
'ab 高 defghijklmnopqrstuvwxyz'
8)字符串切片 slice 操作
9)split()分割和 join()合并
split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下:
>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
join()的作用和 split()作用刚好相反,用于将一系列子字符串连接起来。
如果列表元素都是字符串,那么我们可以快速地使用 join() 方法将所有元素拼接在一起
示例代码如下:
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
注意:
拼接字符串要点:
使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。
推荐使用 join 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。
10)字符串驻留机制和字符串比较
字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制驻留机制。
>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True
11)字符串比较和同一性(is.与 \r== )
我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符。
我们使用 is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是否和 id(obj2)相等。
12)成员操作符
in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。
13)字符串常用方法汇总
常用的查找方法:
我们以一段文本作为测试:
a=’’‘我是高兴,今年 18 岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他 6 岁了。我是一个编程教育的普及者,希望影响 6000 万学习编程的中国人。我儿子现在也开始学习编程,希望他 18 岁的时候可以超过我’’’
方法和使用示例 | 说明 | 结果 |
len(a) | 字符串长度 | 96 |
a.startwith(‘我是高兴’) | 以指定字符串开头 | True |
a.endwith(‘过我’) | 以指定字符串结尾 | True |
a.find(‘高’) | 第一次出现指定字符串的位置 | 2 |
a.rfind(‘高’) | 最后一次出现指定字符串的位置 | 29 |
a.count(‘编程’) | 指定字符串出现了几次 | 3 |
a.isalnum() | 所有字符全是字母或数字 | False |
去除首尾信息
我们可以通过 strip()去除字符串首尾指定信息。
通过 lstrip()去除字符串左边指定信息,rstrip()去除字符串右边指定信息。
【操作】去除字符串首尾信息
>>> "*s*x*t*".strip("*")
's*x*t'
>>> "*s*x*t*".lstrip("*")
's*x*t*'
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
>>> " sxt ".strip()
'sxt'
大小写转换
编程中关于字符串大小写转换的情况,经常遇到。我们将相关方法汇总到这里。为了方便学习,先设定一个测试变量:a = “gaoqi love programming, loveSXT”
示例 | 说明 | 结果 |
a.capitalize() | 产生新的字符串,首字母大写 | ‘Gaoqi love programming, love sxt’ |
a.title() | 产生新的字符串,每个单词都首字母大写 | ‘Gaoqi Love Programming, Love Sxt’ |
a.upper() | 产生新的字符串,所有字符全转成大写 | ‘GAOQI LOVE PROGRAMMING,LOVESXT’ |
a.lower() | 产生新的字符串,所有字符全转成小写 | ‘gaoqi love programming, love sxt’ |
a.swapcase() | 产生新的,所有字母大小写转换 | ‘GAOQI LOVE PROGRAMMING, LOVEsxt’ |
其他方法
isalnum() 是否为字母或数字
isalpha() 检测字符串是否只由字母组成(含汉字)。
isdigit() 检测字符串是否只由数字组成。
isspace() 检测是否为空白符
isupper() 是否为大写字母
islower() 是否为小写字母
字符串的格式化
format()基本用法
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("高淇",18)
'名字是:高淇,年龄是:18'
填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
>>> "{:*>8}".format("245")
'*****245'
>>> "我是{0},我喜欢数字{1:*^8}".format("高淇","666")
'我是高淇,我喜欢数字**666***'
数字格式化
浮点数通过 f,整数通过 d 进行需要的格式化。案例如下:
>>> a = "我是{0},我的存款有{1:.2f}"
>>> a.format("高淇",3888.234342)
'我是高淇,我的存款有 3888.23'
1.3 元祖(tuple)
一、元组的特点:
1、与列表相似,不同之处就在于元组的元素不能被修改。
2、列表使用的是中括号“[]”,元组使用的是小括号“()”。
3、列表属于可变类型,元组属于不可变类型。
4、Python内部对元组进行了大量的优化,访问和处理速度都比列表快。
二、元组的创建、访问和删除
1、创建
#创建
tuple1 = tuple((1,2,3)) #创建了一个包括3个元素的元组对象
print(tuple1)
tuple2 = (1,2,3,4,5,6,7,8,9,10)
print(tuple2)
#打印结果
#(1, 2, 3)
#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
注意:当要创建的元组中只包含一个元素时,必须带逗号。如果不带逗号会将左右括号默认视为运算符。
tuple1= (100, ) #创建一个元素的元组时,必须带有逗号
tuple2= (100)
print(tuple1[0])
#print(tuple2[0]) 无法正确打印元组中第一个元素
#error: TypeError: 'int' object is not subscriptable
2、访问
元组的访问和列表的访问类似。可以访问打印整个元组中的元素,也可以打印下标所对应的元素。
tuple1 = tuple((1,2,3))
print(tuple1)
tuple2 = (1,2,3,4,5,6,7,8,9,10)
print(tuple2)
print(tuple2[5])
num = eval(input("请输入要查找元素的下标:"))
print(tuple2[num])
#打印结果:
#(1, 2, 3)
#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
#6
#请输入要查找元素的下标:2
#3
⭐使用推导式生成并访问元组对象
注意:推导式复制后,元组中的元素并没有被同一生成,一直到访问到某个元素时,才会被及时生成
#使用推导式生成并访问元组对象
#创建
#注意:推导式复制后,元组中的元素并没有被同一生成,一直到访问到某个元素时,才会被及时生成
tuple1 = (value for value in range(1,11)) #返回一个迭代的对象
#访问
print(tuple1)
for i in tuple1:
print(i)
#打印结果:
#<generator object <genexpr> at 0x033FCBF8>
#
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10
3、数据类型
元组的数据类型就是元组(tuple)
4、删除
要是删除,不能只删除元组中的某个元素,如果要删除,那么就使用del删除整个元组。
tuple2 = (1,2,3,4,5,6,7,8,9,10)
print(tuple2)
#删除
del tuple2
5、更改元素错误
不能通过下标之间更改元组里面的值(因为规定元组中的元素不能被修改)。
tuple2 = (1,2,3,4,5,6,7,8,9,10)
tuple2[0] = 100
#error: TypeError: 'tuple' object does not support item assignment
1.4 列表(list)
1.5 字典(dict)
1.6 集合(set)