第3章 python数据类型(一)
1 概述
Python3中有6个标准的数据类型 |
||
1、Number(数字) |
2、String(字符串) |
3、List(列表) |
4、Tuple(元组) |
5、Set(集合) |
6、Dictionary(字典) |
不可变数据(3个) |
Number(数字)、String(字符串)、Tuple(元组)。 |
|
可变数据(3个) |
List(列表)、Dictionary(字典)、Set(集合)。 |
|
不可哈希(unhashable) |
就是指其可变,如列表、字典、集合,都能原地进行修改。 |
|
可哈希(hashable) |
就是指其不可变,如数字、字符串、元组那样,不能原地修改。 |
|
列表/字典/(可变)集合----> 不能放在集合中以及不能作为字典的key(原因:(unhashable)) |
2 数字(Number)
数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。
Python3 支持 int、float、bool、complex(复数)。
整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。(在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中Long。)
浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
注意:在 Python2 中是没有布尔型(True|False)的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。
内置的 type() 函数可以用来查询变量所指的对象类型。
a, b, c, d = 10, 5.2, True, 4+3j
print(type(a), type(b), type(c), type(d))
打印
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
此外还可以使用 isinstance 来判断:
a= 10
A=isinstance(a, int)
print(A)
打印
True
Isinstance与type()函数的区别:
type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。
class A:
pass
class B(A):
pass
A1=isinstance(A(),A)
A2=type(A()) == A
A3=isinstance(B(),A)
A4=type(B()) == A
print(A1,A2,A3,A4)
打印
True True True False
3 字符串(String)
字符串是一个有序的,不可修改的,使用引号( ' 或 " )包围的序列。说明:三引号 ''' 字符串应用场景:换行
Var1='syxk'
Var2="每天在坚持"
Var3="""学习Python,
为了诗和远方。"""
print(Var1+Var2+Var3)
打印
syxk每天在坚持学习Python,
为了诗和远方。
3.1 字符串格式化
在字符串当中已指定的格式符号迕行占位,然后我们将指定的数据传入字符串。
%s:字符串占位符
%d:数字占位符
%f:浮点型数字占位符
%.2f:控制浮点型数字占位符
3.1.1 %s字符串占位符
#1、打印:syxk在学习python。
name = input('姓名:')
do = input('请输入课程名称:')
template = '%s在学习,%s。'%(name,do,)
print(template)
#2、直接做占位符
template = "我是%s,年龄%s,职业%s。"%("syxk","24","运维",)
print(template)
#3、用%做占位符,要想打印出%,则必须是两个%%。
name = 'syxk'
template = "%s现在手机的电量是80%%"%(name,)
print(template)
打印
syxk现在手机的电量是80%
#4、输出个人信息
""""""
name = input('请输入姓名:')
age = input('请输入年龄:')
job = input('请输入职业:')
hobby = input('请输入爱好:')
msg = """
-----------------info of syxk Lei--------------------
Name : %s
Age : %s
Job : %s
Hobbie : %s
---------------------end--------------------------
"""
print(msg%(name,age,job,hobby))
3.1.2 %d数字占位符
#打印整数
print('我今年%d岁了'%(24))
运行结果:
我今年24岁了
3.1.3 %f浮点型数字占位符
#打印浮点数
print("我的身高是%fm"%(1.72))
运行结果:
我的身高是1.720000m
3.1.4 %.2f控制浮点型数字占位符
#打印符点数(保留两位小数)
print("我的身高是%.2fm"%(1.72))
运行结果:
我的身高是1.72m
3.1.5 其他
符号 |
描述 |
%c |
格式化字符及其ASCII码 |
%s |
格式化字符串 |
%d |
格式化整数 |
%u |
格式化无符号整型 |
%o |
格式化无符号八进制数 |
%x |
格式化无符号十六进制数 |
%X |
格式化无符号十六进制数(大写) |
%f |
格式化浮点数字,可指定小数点后的精度 |
%e |
用科学计数法格式化浮点数 |
%E |
作用同%e,用科学计数法格式化浮点数 |
%g |
%f和%e的简写 |
%G |
%F 和%E 的简写 |
%p |
用十六进制数格式化变量的地址 |
字符串格式化操作符辅助指令
符号 |
功能 |
* |
定义宽度或者小数点精度 |
- |
用做左对齐 |
+ |
在正数前面显示加号( + ) |
<sp> |
在正数前面显示空格 |
# |
在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 |
显示的数字前面填充'0'而不是默认的空格 |
% |
'%%'输出一个单一的'%' |
(var) |
映射变量(字典参数) |
m.n. |
m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
3.2 字符串特殊字符
特殊字符就是在字符串当中起到特殊含义的字符。
符号 |
功能 |
\(在行尾时) |
续行符 |
\\ |
反斜杠符号 |
\' |
单引号 |
\\'' |
双引号 |
\a |
响铃(win会颤抖下,发出不明觉厉的声响) |
\b |
退格(Backspace) |
\000 |
空 |
\n |
换行 |
\v |
纵向制表符 |
\t |
横向制表符 |
\r |
回车 |
\f |
换页 |
3.3 字符串特有功能(方法)
.upper() (全部改为大写)
.lower() (全部改为小写)
.isdigit() (判断是否是阿拉伯数字,以布尔数值返回结果,字符串中只要有非数字,输出结果都为False
.strip() (去除所有空格)/ .lstrip() (去除左侧空格) / .rstrip() (去除右侧空格)
.replace("被替换的内容","新内容",2) replace后写数字表示:替换几处
.split('分割标记') / .split('分割标记', 分割几处 ) / .rsplit()
.startswith() / .endswith() (.startswith()判断是否以某某开头,.endswith()判断是否以某某结尾)
.format() 字符串格式化(Python2.6开始)
.encode() 编码将unicode编码转换成其他类型的编码。.decode()解码
.join() 循环每个元素,并在元素与元素之间加入连接符
上述功能使用过程说明:生成新的值来接收.
3.3.1 .upper()及.lower(),判断大小写
1、要求:将小写的syxk打印成大写SYXK.
错误写法:
value = 'syxk'
value.upper()
print(value)
打印
syxk
正确写法:
value = 'syxk'
new_value = value.upper()
print(new_value)
打印
SYXK
2、要求:将SyXK中大写的字母全部换成小写字母syxk
value = 'SyXK'
new_value = value.lower()
print(new_value)
打印
syxk
3.3.2 .isdigit(),判断是否为阿拉伯数字
.isdigit() (判断是否是阿拉伯数字,以布尔数值返回结果,字符串中只要有非数字,输出结果都为False)
print('12345'.isdigit())
打印
True
print('1a45'.isdigit())
打印
False
3.3.3 .strip()/.lstrip()/.rstrip(),去除空格
.strip() (去除所有空格)/ .lstrip() (去除左侧空格) / .rstrip() (去除右侧空格)
1、输入:" syxk "
user = input('请输入用户名:') # " syxk "
new_user1 = user.rstrip()
print('---->',new_user1,'<-----')
new_user2 = user.lstrip()
print('---->',new_user2,'<-----')
# 或
new_user2 = user.strip()
data = new_user2.upper()
print('---->',data,'<-----')
打印(注:蓝色框框,是空格)
3.3.4 .replace(),替换
.replace("被替换的内容","新内容",2) replace后写数字表示:替换几处
1、输入:"我是sysxsyxksyxk"
message = input('请输入姓名:')
# print(message) # "syxksyxksyxk"
# data = message.replace('syxk',"**")
data = message.replace('syxk',"**",2)
print(data)
打印
请输入姓名:syxksyxksyxk
****syxk
3.3.5 .split()/rsplit(),分割标记
.split('分割标记') / .split('分割标记', 分割几处 ) / .rsplit()
1、要求:用逗号进行分割syxk现在一脸懵逼,因为晚上一直在学习,直到深夜。
message = "syxk现在一脸懵逼,因为晚上一直在学习,直到深夜。"
result1 = message.split(',')
result2 = message.split(',',1)
result3 = message.rsplit(',')
result4 = message.rsplit(',',1)
print(result1)
print(result2)
print(result3)
print(result4)
打印
['syxk现在一脸懵逼', '因为晚上一直在学习', '直到深夜。']
['syxk现在一脸懵逼', '因为晚上一直在学习,直到深夜。']
['syxk现在一脸懵逼', '因为晚上一直在学习', '直到深夜。']
['syxk现在一脸懵逼,因为晚上一直在学习', '直到深夜。']
3.3.6 .startswith() / .endswith()
.startswith() / .endswith() (.startswith()判断是否以某某开头,.endswith()判断是否以某某结尾)
1、判断是否以某某开头
#方法一:
name = 'syxk'
name = name[0:2]
if name == 'sy':
print('是以sy开头')
else:
print('不是以sy开头')
打印
是以sy开头
#方法二:
name = 'syxk'
name = name.startswith('sy')
print(name)
打印
True
3.3.7 .format() 字符串格式化
name = '我叫:{0},年龄:{1}岁'.format('syxk',23)
print(name)
打印
我叫:syxk,年龄:23岁
3.3.8 .encode() 编码/.decode()解码
.encode() 编码将unicode编码转换成其他类型的编码。.decode()解码
name = '岁月星空' #解释器读取后,按照unicode编码存储:8个字节
v1 = name.encode('utf-8')
print(v1)
v2 = name.encode('gbk')
print(v2)
v3 = v1.decode('utf-8')
print(v3)
v4 = v2.decode('gbk')
print(v4)
打印
b'\xe5\xb2\x81\xe6\x9c\x88\xe6\x98\x9f\xe7\xa9\xba'
b'\xcb\xea\xd4\xc2\xd0\xc7\xbf\xd5'
岁月星空
岁月星空
3.3.9 .join()
.join() 循环每个元素,并在元素与元素之间加入连接符
name = 'syxk' #s_y_x_k
result = '_'.join(name)
print(result)
打印
s_y_x_k
3.3.10 其他
3.4 字符串公共功能(方法)
Len长度
计算长度。(字符串->计算字符串中的字符个数)
Index索引
索引(取值)
(左侧0作为开始,右侧-1开始,超出范围报错)
索引(切片)
如:v[2:3] #2 <=索引位置 < 3
索引(步长)
如:v[2:-1:2]
上述功能使用过程说明:生成新的值来接收.
注意:公共功能(不是指和整型和布尔类型公共, 整型和布尔类型无法使用.)
3.4.1 Len,计算长度
计算长度。(字符串->计算字符串中的字符个数)
value = 'syxk'
number = len(value)
print(number)
print(type(number))
打印
4
<class 'int'>
3.4.2 Index,索引
(左侧0作为开始,右侧-1开始,超出范围报错)
3.4.2.1 索引(取值)
value = 'syxk'
# 索引 0123 #0 1 2 3 ...从左往右
v1 = value[1]
print(v1)
#输出结果为 y
value = 'syxk'
# 索引 -4-3-2-1
v1 = value[-1] #-1 -2 -3 ...从右往左
print(v1)
#输出结果为k
#注意,当value值为4以上(-5以下)时,就会报错,索引位置超出了范围
3.4.2.2 索引(切片)
v = 'syxksyxk'
v1 = v[2:3] #2 <=索引位置 < 3
print(v1)
# 输出结果x
v2 = v[2:]
print(v2)
# 输出结果xksyxk
v3= v[:-1]
print(v3)
# 输出结果syxksyx
3.4.2.3 索引(步长)
name = 'syxksyxk'
val = name[0:-1:2]
print(val)
#输出结果sxsx
val = name[1:-1:2]
print(val)
#输出结果yky
val = name[1::2]
print(val)
#输出结果ykyk
val = name[::2]
print(val)
#输出结果sxsx
val = name[-1:0:-1]
print(val)
#输出结果kxyskxy
val = name[-1:0:-2]
print(val)
#输出结果kyky
#将字符串进行反转。
val = name[::-1]
print(val)
# 输出结果kxyskxys
4 数据类型的转换
(1)数字与字符串之间的转换
(2)数字转换成布尔值
值为0时才为Flase,其他的都为True
(3)字符串转换成布尔值
值为空才为false,其他的都为True
(4)布尔值转换成整型
值为True,输出结果为1,值为False,输出结果为0
(5)布尔值转换为字符串
值为True,结果为字符串的True,值为False,结果为字符串的False
#数字转布尔值(0是假,其他都是真)
v1 = bool(1)
v2 = bool(0)
print(v1,v2)
# 输出结果True False
#字符串转布尔值(""是假,其他都是真)
v1 = bool("hello")
v2 = bool("")
print(v1,v2)
# 输出结果True False
# 数字转字符串
v1 = 6
v2 = str(v1)
# 字符串转数字
v1 = "6"
v2 = int(v1)
# 字符串转布尔值
v1 = '' #值为空才为flase,其他的都为True
v2 = bool(v1)
print(v2)
# 输出的结果为Flase
# 将布尔(bool)值转换整型
v1 = True
v2 = int(v1)
print(v2)
#值为True,输出结果为1,值为Flase,输出结果为0
# 将布尔(bool)值转换字符串
v1 = True
v2 = str(v1)
print(v2)
#值为True,输出结果为字符串的True,值为Flase,输出结果为字符串的Flase
a="1"
b=2
c=int(a)+b
print(c)
# 输出的结果为:3
print(type(a),type(b),type(c))
# 输出的结果为:<class 'str'> <class 'int'> <class 'int'>
出处:https://www.cnblogs.com/syxk
^_^如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,您的“推荐” 将是我最大的写作动力^_^。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。