![1e380a9332f5b0a55b27b21f4af4b164.png](https://i-blog.csdnimg.cn/blog_migrate/02f59d54aef096d441d7316036d60c95.jpeg)
学习任何一种编程语言时首先要对它的数据类型有所了解,从本篇开始会对 Python 中的常见数据类型的基本概念和操作进行介绍。
Python中有6种标准的数据类型:数字(Number)、字符串(String)、列表(List)、元组(Tuple)、集合(Set)、字典(Dictionary)。
上述6种数据类型可分为两类:
- 不可变数据类型:数字、字符串、元组。
- 可变数据类型:列表、集合、字典。
什么是不可变数据类型和可变数据类型,在下面具体的示例中再介绍,会有更清晰的认识。
本文介绍两个最基本的数据类型:数字和字符串。
数字
1 基本概念
Python 的数字类型中包括:整型(int)、浮点型(float)、布尔型(bool)、复数(complex)。其中,布尔型:表示真(True)、假(False)。0和空都表示False,如 ' '、[ ]、{ }、None。非空表示True。
2 常用操作
数值运算:加、减、乘、除、整除、求余(+、-、 *、 /、 //、 %)
10、2、8、16进制表示与转换:
二进制:用0b表示,如0b10表示10进制的2。
八进制:用0o表示,如0o10表示10进制的8。
十六进制:用0x表示,如0x10表示10进制的16。
bin( ):转换为二进制。
int( ):转换为十进制。
hex( ):转换为十六进制。
oct( ):转换为八进制。
内建函数(BIF):
abs():取绝对值
ceil() / floor():向上 / 向下取整
round():四舍五入
min() / max():最小值/最大值
下面给出了数字类型的知识点导图:
![9189e65462a6ecffe9196cb22c720417.png](https://i-blog.csdnimg.cn/blog_migrate/ffe39840393316ad197bec88eb9d32f5.jpeg)
最后,我们再看一下,为什么说数字是不可变类型。每种数据类型对应的变量自创建时就会被分配一个内存地址,当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,就称不可变数据类型。
与不可变类型相对的,当数据类型的对应变量的值发生了改变,它对应的内存地址不发生改变,则称为可变数据类型。
例如:给变量 num 赋值,然后改变 num 的值,发现前后两次输出的变量值都为整型,内存地址发生改变。
id():获取对象的内存地址
type():查看对象的类型
num = 2
print(id(num), type(num))
num = 3
print(id(num), type(num))
# 输出
140720244078400 <class 'int'>
140720244078432 <class 'int'>
字符串
1 基本概念
字符串是一个序列,可以使用单引号('')、双引号("")或三引号(''' ''',""" """)创建。此外,三引号可定义多行字符串。
字符串中可包含转义字符,如换行(n )、单引号(' )。
非转义的原始字符串:字符串前加r,例如:print(r'hellonworld'),换行符 n 也会被输出,而不会产生换行。
unicode 字符串:在字符串前加u,对字符串进行 unicode 编码。在 Python3 中,字符串默认是 unicode 编码,中文字符串前无需加u,而对于 Python2,默认编码是ascii,在中文前需要加u。
2 常用操作
常用操作主要有以下几点:
- 字符串拼接/合并
- 字符串复制
- 字符串索引/切片
- 字符串的替换
- 字符串的匹配查找
- 去除字符串两侧指定字符
- 字符串按指定字符分隔
- 计算字符串的长度
- 统计指定字符串出现的次数
- 判断是否包含指定字符串
- 字符串转换大小写
- 格式化字符串
下面通过具体示例依次介绍各种操作。
字符串拼接/合并
使用 “+”合并字符串
s = "hello" + " " + "world!"
print(s)
# 输出
hello world!
使用 join() 方法:str.join(seq), str为连接符,seq为字符串 或 字符串为元素构成的序列。
s1 = 'python'
s2 = ['I', 'love', 'python']
print('_'.join(s1))
print('_'.join(s2))
# 输出
p_y_t_h_o_n
I_love_python
字符串复制
s = 'python'
print(s*3)
# 输出
pythonpythonpython
字符串索引/切片
通过下标索引,默认从0开始。
s = 'python'
result = s[1]
print(result)
# 输出
y
切片 [start:stop:step] start:开始索引,stop:结束索引,step: 步长,默认值为1。
s = 'python'
r1 = s[1:] # 从开始索引截取到字符串的最后
r2 = s[:3] # 从开头截取到结束索引之前
r3 = s[1:3] # 从开始索引截取到结束索引之前
r4 = s[:] # 截取所有字符串
r5 = s[::-1] # 字符串反转
print('r1=%s, r2=%s, r3=%s, r4=%s, r5=%s'% (r1, r2, r3, r4, r5)) # 格式化输出
# 输出
r1=ython, r2=pyt, r3=yt, r4=python, r5=nohtyp
字符串的替换
"""
功能:将字符串str中的子字符串old用新子字符串new替换。
语法:str.replace(old, new[, max])
参数:str为原始字符串,old为将被替换的子字符串,new为新字符串,max表示最多替换的次数,可选。
返回:返回替换后的新字符串。
"""
s1 = 'I love python!'
r1 = s1.replace('python', 'java')
s2 = 'abcabcabcabc'
r2 = s2.replace('ab', 'AB', 3)
print(r1)
print(r2)
# 输出
I love java!
ABcABcABcabc
字符串的匹配查找
"""
功能:检测字符串中是否包含子字符串
语法:str.find(substr, beg=0, end=len(string))
参数:substr为待查找的字符串,beg为开始索引,默认为0,end为结束索引,默认为字符串的长度。
返回:如果包含则返回子字符串开始的索引值,否则返回-1。
"""
s = 'Always on the road.'
r1 = s.find('road', 7, len(s))
r2 = s.find('Road')
print(r1, r2)
# 输出
14 -1
与 find() 类似,index() 也可以检测字符串中是否包含子字符串。不同的是,当查询不到待匹配的字符串时,会抛出异常。
"""
功能:检测字符串中是否包含子字符串
语法:str.index(substr, beg=0, end=len(string))
参数:substr为待查找的字符串,beg为开始索引,默认为0,end为结束索引,默认为字符串的长度。
返回:如果包含子字符串返回开始的索引值,否则抛出异常。
"""
s = 'Always on the road.'
r1 = s.index('road', 7, len(s))
print(r1)
r2 = s.index('Road')
# 输出
14
ValueError: substring not found
去除字符串两侧指定字符
"""
功能:用于移除字符串头尾指定的字符
语法:str.strip([char])
参数:chars为待移除的字符序列
返回:移除字符串头尾指定的字符生成的新字符串。
"""
s1 = ' Always on the road.tn'
r1 = s1.strip()
print(r1)
s2 = 'abcdcdab'
r2 = s2.strip('ab')
print(r2)
# 输出
'Always on the road.'
'cdcd'
与 strip() 类似的还有 lstrip()、rstrip() 两个函数,lstrip() 用于去掉左侧的指定字符,rstrip() 用于去掉右侧的指定字符。
字符串按指定字符分隔
"""
功能:通过指定分隔符对字符串进行切片。
语法:str.split(substr="", num=str.count(substr))
参数:substr为分隔符,默认为所有的空字符,包括空格、换行(n)、制表符(t)等,num为分隔次数,默认为-1,即分隔所有。
返回:返回分割后的字符串列表。
"""
s1 = ' Always on the road.tn'
r1 = s1.split()
print(r1)
s2='abcdabcdabcd'
r2 = s2.split('c', 2)
print(r2)
# 输出
['Always', 'on', 'the', 'road.']
['ab', 'dab', 'dabcd']
计算字符串的长度
s = 'Always on the road.'
r = len(s)
print(r)
# 输出
19
统计指定字符串出现的次数
"""
功能:用于统计字符串里某个字符出现的次数。
语法:str.count(substr, start=0,end=len(str))
参数:substr为待匹配的子字符串,start和end分别为字符串开始、结束搜索的位置。
返回:返回子字符串在字符串中出现的次数。
"""
s = 'Always on the road.'
r = s.count('a')
print(r)
# 输出
2
判断是否包含指定字符串
s = 'Always on the road.'
print('road' in s)
print('road' not in s)
# 输出
True
False
字符串转换大小写
将每个单词首字母变为大写: title()
s = 'I love python!'
r = s.title()
print(r)
# 输出
I Love Python!
字符串字母全部转为小写/大写: lower()/upper()
s = 'I love python!'
r1 = s.lower()
r2 = s.upper()
print(r1)
print(r2)
# 输出
i love python!
I LOVE PYTHON!
字符串首字母大写: capitalize()
s = 'i love python!'
r = s.capitalize()
print(r)
# 输出
I love python!
大小写互换: swapcase()
s = 'abcABC'
r = s.swapcase()
print(r)
# 输出
ABCabc
格式化字符串
%-格式化
"""
格式化符号:
%s:格式化字符串
%d:格式化整数
%f:格式化浮点数,可指定小数点后的精度
"""
s = ("lin", '1001')
print("姓名:%s, 工号:%s"%s)
# 输出
姓名:lin, 工号:1001
str.format()-格式化
# 按默认位置填充
print("{} {}".format("hello", "world") )
# 输出
hello world
# 按位置索引填充
print("{1} {0}".format("world", "hello"))
# 输出
hello world
# 通过参数填充
print("姓名:{name}, 学号:{ID}".format(name="张三", ID="1002"))
# 输出
姓名:张三, 学号:1002
# 通过字典设置参数
data = {"name": "张三", "ID": "1002"}
print("姓名:{name}, 学号:{ID}".format(**data))
# 输出
姓名:张三, 学号:1002
f-string 格式化
"""
是Python3.6新引入的一种字符串格式化方法
在形式上是以 f 或 F 修饰符引领的字符串(f'xxx' 或 F'xxx'),以大括号 {} 标明被替换的字段。
在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。
"""
# 解析变量
name = "张三"
ID = "1002"
print(f"姓名: {name}, 学号: {ID}")
# 输出
姓名: 张三, 学号: 1002
# 解析字典
data = {"name": "张三", "ID": "1002"}
print(f"姓名: {data['name']}, 学号: {data['ID']}")
# 输出
姓名: 张三, 学号: 1002
# 表达式
s1 = 'hello'
s2 = 'world'
print(f'{s1+s2}')
# 输出
helloworld
最后,附上字符串相关知识的思维导图:
![e444221550af89572df8a7dd189ec5ed.png](https://i-blog.csdnimg.cn/blog_migrate/44813443b845579198d5780e539c45d6.jpeg)
—END—