python数据类型总结

1、python的数据类型

基本的数据类型:数字型、字符串、元祖、列表、字典、集合
不可变数据类型:数字型、字符串、元祖
可变数据类型:列表、字典、集合

1.1 数字型(number)

数字类型 在 Pyhton 中非常常见,经常用于数字之间的运算、大小比较、条件判断等等。
 数字类型包括:整型、浮点型、复数型、布尔型。其中布尔型属于特殊的数字类型。

1)整型(int)

  • 在数字中,正整数、0、负整数都称为整型。
  • 使用type()获取数据类型
  • 使用id()获取内存地址
  • 整数运算就是包括加、减、乘、除、模、幂等等运算方式
# 加法
# 减法
# 乘法
# 除法(浮点数)
# 整除(整数)
# 模
# 幂
# 取余
  • int()函数:该函数用来将一个实数或字符串转换成整型,如果函数内没有传入任何参数,则返回 0。

2)浮点型(float)

python不支持时间减法 python不支持的数字类型_字符串

  • 浮点数有两种表示形式:正常形式(带小数点)和科学记数法。
  • 浮点数运算
  • 浮点型和整型运算会得到浮点型。
  • 浮点型和浮点型计算显然会得到浮点型。
  • 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 操作

python不支持时间减法 python不支持的数字类型_浮点型_02

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'

python不支持时间减法 python不支持的数字类型_浮点型_03

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

python不支持时间减法 python不支持的数字类型_python不支持时间减法_04

1.4 列表(list)

1.5 字典(dict)

1.6 集合(set)