在程序中,数据的存储形式多种多样,不同类型的数据需要使用不同的方式来表示。例如,姓名通常采用字符串的形式保存,而年龄则适合用数值类型存储。Python 提供了六种基础数据类型,用于满足不同场景下的数据处理需求,主要包括:数字(Numbers)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)等。
本文将重点讲解其中的数字类型与字符串类型。
数字类型(Number)
在 Python 中,数字类型用于表示数值数据,属于不可变对象,即一旦创建就不能修改其值。Python 支持三种主要的数字类型:
1.
整型(int):不包含小数部分,支持任意精度的整数运算。由于其长度不受限制,在 Python 3 中已经不再区分 int 和 long 类型。
2.
浮点型(float):用于表示带有小数点的数值,由整数部分和小数部分共同构成。
3.
复数型(complex):由实部和虚部组成,形式为 a + bj,也可通过 complex(a, b) 构造。其中实部和虚部均为浮点类型。该类型在常规开发中较少使用,多见于科学计算或工程建模领域。
如何定义一个数字类型的变量?具体语法如下所示:
# 整形和浮点型
a = 10
b = 10.2
# 复数
c = complex(1, 2)
数字类型之间可以相互转换,但需要注意的是,这种转换仅适用于本身可解析为数字的数据,无法将字符串、列表等非数值类型直接转为数字类型。
'''
int(x) 将x转换为一个整数。
float(x) 将x转换到一个浮点数。
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
'''
a = 1.0
b = int(a) # 将a转成整形
此外,int 与 float 类型之间可以通过数学运算符进行混合运算,结果通常会自动转换为更精确的浮点类型。
print(2 + 2)
print(10 / 3) # 总是返回一个浮点数,不同的计算机上得到的结果可能不同,是由于精度问题
字符串类型(str)
字符串是 Python 中最常用的数据结构之一,可通过成对的单引号或双引号来定义。它同样属于不可变类型,意味着字符串一旦被创建,其内容不能被更改。
name = 'python'
gender = "male"
几乎所有的数据类型都可以转换为字符串形式,这使得字符串在数据输出和调试过程中具有很高的实用性。
res=str({'a':1})
print(res,type(res))
字符串提供了丰富的操作方法,以下是几种常见且实用的操作方式:
一、通过索引获取字符
每个字符在字符串中都有对应的索引位置。正向索引从 0 开始递增,反向索引则从 -1 开始倒序计数。

若需提取某个特定位置的字符,可通过索引方式进行访问,支持正向和反向取值。
my_str = 'python'
# 正向取值
str1 = my_str[0] # P
str2 = my_str[5] # n
# 反向取值
str3 = my_str[-1] # n
str4 = my_str[-6] # P
二、切片操作——提取子字符串
利用方括号配合起始与结束索引来截取字符串的一部分,实现子串的提取。
'''
变量[起始索引:结束索引:步长]
注意:[]取值顾头不顾尾,取出的子字符串不包括结束索引对应的值,可以通过控制步长操作输出的子字符串
'''
my_str = 'python'
# 正向切片
str1 = my_str[0: 5] # pytho
str2 = my_str[0: 5] # 等价于my_str[0: 5: 1] ,步长是1
str3 = my_str[0: 5: 2] # 步长等于2,相当于从第一个字符开始每隔一个取一个值,所以结果是 pto
str4 = my_str[5: 0: -1] # 步长可以为负数,表示从倒序取子字符串,结果是 nohty
str5 = my_str[:] # 表示取字符串中的所有字符, python
str6 = my_str[::] # 表示取字符串中的所有字符, python
str7 = my_str[::-1] # 表示将字符串反转,nohtyp
# 反向切片
str6 = my_str[-1: -3: -1] # no
三、获取字符串长度 —— len() 函数
使用内置函数 len() 可以快速查看字符串所包含的字符总数。
my_str = 'python'
print(len(my_str)) # 6
四、成员检测 —— in 与 not in 运算符
可用于判断某段字符是否存在于目标字符串中,返回布尔值结果。
# in 判断hello 是否在 str1里面
>>> 'hello' in str1
True
# not in:判断tony 是否不在 str1里面
>>> 'tony' not in str1
True
五、遍历字符串 —— for 循环
通过 for 循环可以逐个访问字符串中的每一个字符,便于执行批量处理逻辑。
my_str = 'python'
# 字符串是可迭代对象,依次取出字符串中的每个字符
for i in my_str:
print(i)
六、字符串之间的运算
字符串支持拼接等基本运算操作,但不允许与非字符串类型(如数字、列表)直接进行运算。
a = hello
b = world
# + 字符串拼接操作
print(a + b) # helloworld
# * 重复输出字符串
print(a * 2) # hellohello
七、常用内置方法介绍
Python 为字符串提供了大量内置方法(可通过“字符串.方法名”调用),虽然很多方法并不频繁使用,但以下这些较为常用:
-
去除两侧指定字符
用于清除字符串开头和结尾的特定字符或空白符。
str1 = '**tony***'
# 括号内不指定字符,默认移除空白字符,比如空格 制表符tab
str1.strip('*') # 移除左右两边的指定字符
str1.lstrip('*') # 只移除左边的指定字符
str1.rstrip('*') # 只移除右边的指定字符
split() rsplit()
-
按分隔符拆分字符串
使用指定字符对字符串进行分割,返回结果为列表类型。
# 括号内不指定字符,默认以空格作为切分符号
str3 = 'hello world'
b = str3.split()
print(b) # ['hello', 'world']
# split会按照从左到右的顺序对字符串进行切分,可以指定切割次数
str5='C:/a/b/c/d.txt'
print(str5.split('/',1)) # ['C:', 'a/b/c/d.txt']
# rsplit刚好与split相反,从右往左切割,可以指定切割次数
str5='a|b|c'
print(str5.rsplit('|',1)) # ['a|b', 'c']
lower() upper()
-
大小写转换
将字符串整体转换为全大写或全小写格式。
>>> str2 = 'My nAme is tonY!'>>> str2.lower() # 将英文字符串全部变小写my name is tony!>>> str2.upper() # 将英文字符串全部变大写MY NAME IS TONY!
startswith() endswith()
-
判断前缀与后缀
检查字符串是否以某个子串开头或结尾,返回 True 或 False。
>>> str3 = 'tony jam'# startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False>>> str3.startswith('t') True>>> str3.startswith('j')False# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False>>> str3.endswith('jam')True>>> str3.endswith('tony') False
join()
-
连接可迭代对象中的元素
从列表、元组等结构中取出多个字符串元素,并以指定连接符合并成一个新的字符串。
>>> '%'.join('hello') # 从字符串'hello'中取出多个字符,然后按照%作为连接符进行拼接'h%e%l%l%o'>>> '|'.join(['tony','18','read']) # 从列表中取出多个字符,然后按照|作为连接符进行拼接'tony|18|read'
replace()方法
-
替换字符串中的内容
使用新字符串替换原字符串中的旧内容,还可设定替换次数。
>>> str7 = 'my name is tony, my age is 18!' # 将tony的年龄由18岁改成73岁>>> str7 = str7.replace('18', '73') # 语法:replace('旧内容', '新内容')>>> str7my name is tony, my age is 73!# 可以指定修改的个数>>> str7 = 'my name is tony, my age is 18!'>>> str7 = str7.replace('my', 'MY',1) # 只把一个my改为MY>>> str7'MY name is tony, my age is 18!'
isdigit()
-
判断是否全由数字组成
检测字符串中的所有字符是否均为数字,返回布尔类型结果。
>>> str8 = '5201314'>>> str8.isdigit()True>>> str8 = '123g123'>>> str8.isdigit()False
center() ljust() rjust() zfill()
>>> name='tony'>>> name.center(30,'-') # 总宽度为30,字符串居中显示,不够用-填充-------------tony------------->>> name.ljust(30,'*') # 总宽度为30,字符串左对齐显示,不够用*填充tony**************************>>> name.rjust(30,'*') # 总宽度为30,字符串右对齐显示,不够用*填充**************************tony>>> name.zfill(50) # 总宽度为50,字符串右对齐显示,不够用0填充0000000000000000000000000000000000000000000000tony
captalize(),swapcase(),title()
# captalize:首字母大写>>> message = 'hello everyone nice to meet you!'>>> message.capitalize()Hello everyone nice to meet you! # swapcase:大小写翻转>>> message1 = 'Hi girl, I want make friends with you!'>>> message1.swapcase() hI GIRL, i WANT MAKE FRIENDS WITH YOU! # title:每个单词的首字母大写>>> msg = 'dear my friend i miss you very much'>>> msg.title()Dear My Friend I Miss You Very Much
关于字符串格式化输出的相关内容,请参考之前发布的文章《与用户交互》。
# 整形和浮点型
a = 10
b = 10.2
# 复数
c = complex(1, 2)
'''
int(x) 将x转换为一个整数。
float(x) 将x转换到一个浮点数。
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
'''
a = 1.0
b = int(a) # 将a转成整形
print(2 + 2)
print(10 / 3) # 总是返回一个浮点数,不同的计算机上得到的结果可能不同,是由于精度问题
name = 'python'
gender = "male"
res=str({'a':1})
print(res,type(res))
my_str = 'python'
# 正向取值
str1 = my_str[0] # P
str2 = my_str[5] # n
# 反向取值
str3 = my_str[-1] # n
str4 = my_str[-6] # P
'''
变量[起始索引:结束索引:步长]
注意:[]取值顾头不顾尾,取出的子字符串不包括结束索引对应的值,可以通过控制步长操作输出的子字符串
'''
my_str = 'python'
# 正向切片
str1 = my_str[0: 5] # pytho
str2 = my_str[0: 5] # 等价于my_str[0: 5: 1] ,步长是1
str3 = my_str[0: 5: 2] # 步长等于2,相当于从第一个字符开始每隔一个取一个值,所以结果是 pto
str4 = my_str[5: 0: -1] # 步长可以为负数,表示从倒序取子字符串,结果是 nohty
str5 = my_str[:] # 表示取字符串中的所有字符, python
str6 = my_str[::] # 表示取字符串中的所有字符, python
str7 = my_str[::-1] # 表示将字符串反转,nohtyp
# 反向切片
str6 = my_str[-1: -3: -1] # no
my_str = 'python'
print(len(my_str)) # 6
# in 判断hello 是否在 str1里面
>>> 'hello' in str1
True
# not in:判断tony 是否不在 str1里面
>>> 'tony' not in str1
True
my_str = 'python'
# 字符串是可迭代对象,依次取出字符串中的每个字符
for i in my_str:
print(i)
a = hello
b = world
# + 字符串拼接操作
print(a + b) # helloworld
# * 重复输出字符串
print(a * 2) # hellohello
strip() lstrip() rstrip()
str1 = '**tony***'
# 括号内不指定字符,默认移除空白字符,比如空格 制表符tab
str1.strip('*') # 移除左右两边的指定字符
str1.lstrip('*') # 只移除左边的指定字符
str1.rstrip('*') # 只移除右边的指定字符
split() rsplit()
# 括号内不指定字符,默认以空格作为切分符号
str3 = 'hello world'
b = str3.split()
print(b) # ['hello', 'world']
# split会按照从左到右的顺序对字符串进行切分,可以指定切割次数
str5='C:/a/b/c/d.txt'
print(str5.split('/',1)) # ['C:', 'a/b/c/d.txt']
# rsplit刚好与split相反,从右往左切割,可以指定切割次数
str5='a|b|c'
print(str5.rsplit('|',1)) # ['a|b', 'c']
lower() upper()
>>> str2 = 'My nAme is tonY!'>>> str2.lower() # 将英文字符串全部变小写my name is tony!>>> str2.upper() # 将英文字符串全部变大写MY NAME IS TONY!
startswith() endswith()
>>> str3 = 'tony jam'# startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False>>> str3.startswith('t') True>>> str3.startswith('j')False# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False>>> str3.endswith('jam')True>>> str3.endswith('tony') False
join()
>>> '%'.join('hello') # 从字符串'hello'中取出多个字符,然后按照%作为连接符进行拼接'h%e%l%l%o'>>> '|'.join(['tony','18','read']) # 从列表中取出多个字符,然后按照|作为连接符进行拼接'tony|18|read'
replace()方法
>>> str7 = 'my name is tony, my age is 18!' # 将tony的年龄由18岁改成73岁>>> str7 = str7.replace('18', '73') # 语法:replace('旧内容', '新内容')>>> str7my name is tony, my age is 73!# 可以指定修改的个数>>> str7 = 'my name is tony, my age is 18!'>>> str7 = str7.replace('my', 'MY',1) # 只把一个my改为MY>>> str7'MY name is tony, my age is 18!'
isdigit()
>>> str8 = '5201314'>>> str8.isdigit()True>>> str8 = '123g123'>>> str8.isdigit()False
center() ljust() rjust() zfill()
>>> name='tony'>>> name.center(30,'-') # 总宽度为30,字符串居中显示,不够用-填充-------------tony------------->>> name.ljust(30,'*') # 总宽度为30,字符串左对齐显示,不够用*填充tony**************************>>> name.rjust(30,'*') # 总宽度为30,字符串右对齐显示,不够用*填充**************************tony>>> name.zfill(50) # 总宽度为50,字符串右对齐显示,不够用0填充0000000000000000000000000000000000000000000000tony
captalize(),swapcase(),title()
# captalize:首字母大写>>> message = 'hello everyone nice to meet you!'>>> message.capitalize()Hello everyone nice to meet you! # swapcase:大小写翻转>>> message1 = 'Hi girl, I want make friends with you!'>>> message1.swapcase() hI GIRL, i WANT MAKE FRIENDS WITH YOU! # title:每个单词的首字母大写>>> msg = 'dear my friend i miss you very much'>>> msg.title()Dear My Friend I Miss You Very Much