可变数据类型:列表、字典和集合
不可变数据类型:数字、字符串、元组
# 浮点型 带小数点 不精确 因为小数部分用2的负数次方表示,有的不能完全表示准确
# 精度:float64位>float32位
需要通过字符串或整数来初始化Decimal对象,而不是直接使用浮点数。这样可以确保精确性,并避免浮点数舍入误差的问题。
# decimal类型,完全精确 因为小数部分也是完全用的二进制表示
from decimal import Decimal
money=Decimal("3.212")
print(money)
# 复数
a=-5+4j
print(a.real)#实部,存储为浮点型
print(a.imag)#虚部,存储为浮点型
‘’, 0, 0.0, (), [],{},None, False 为假
True – 1
False – 0
可以参与计算
>>> print(True+False+True+True+False)
3
None是一个特殊的常量,表示一种特殊的数据类型(NoneType)
在 Python3 中,bytes 类型表示的是不可变的二进制序列(byte sequence)。
与字符串类型不同的是,bytes 类型中的元素是整数值(0 到 255 之间的整数),而不是 Unicode 字符。
bytes 类型通常用于处理二进制数据,比如图像文件、音频文件、视频文件等等。在网络编程中,也经常使用 bytes 类型来传输二进制数据。
创建 bytes 对象的方式有多种,最常见的方式是使用 b 前缀:
此外,也可以使用 bytes() 函数将其他类型的对象转换为 bytes 类型。bytes() 函数的第一个参数是要转换的对象,第二个参数是编码方式,如果省略第二个参数,则默认使用 UTF-8 编码:
x = b"hello"
x = bytes("hello", encoding="utf-8")
与字符串类型类似,bytes 类型也支持许多操作和方法,如切片、拼接、查找、替换等等。同时,由于 bytes 类型是不可变的,因此在进行修改操作时需要创建一个新的 bytes 对象。例如:
示例:
x = b"hello"
y = x[1:3] # 切片操作,得到 b"el"
z = x + b"world" # 拼接操作,得到 b"helloworld"
需要注意的是,bytes 类型中的元素是整数值,因此在进行比较操作时需要使用相应的整数值。例如:
示例:
x = b"hello"
if x[0] == ord("h"):
print**("The first element is 'h'")
其中 ord() 函数用于将字符转换为相应的整数值。
--不可变数据类型,内存空间上的值不可变
str1='abc'
str2="abc"
str3="""
abc
xyz
"""
print(str1,str2,str3)
\t:制表符 \n:换行符
# 字符串里的转义字符: \
>>> a="123\t456"
>>> print(a)
123 456
print(a)
# r 抑制转义
>>> print(r"123\n456")
123\n456
语法:str[start,end,step]
1、确定 step 为正还是为负,默认是1,为正
为正从左往右截取
为负从右往左截取
2、确定 start 和 end 的位置, start 在截取方向上要在 end 的前面
3、确定步长
>>> str4="abcdefghijk"
#正序 0 开始,反序从 -1 开始
>>> print(str4[3])
d
>>> print(str4[-2])
j
# 左闭右开,end大于长度不会报错,只会全部输出完
>>> print(str4[0:3])
abc
# 省略开头(默认0) 省略结束(默认结尾)
>>> print(str4[:6])
abcdef
>>> print(str4[2:])
cdefghijk
# 加入步长,走n步取一个,仍然左闭右开
>>> print(str4[0:7:2])
aceg
>>> print(str4[-9:-2])
cdefghi
>>> print(str4[-2:-9:-1])
jihgfed
# 反向输出
>>> print(str4[::-1])
kjihgfedcba
print(int("10"))
print(float("2.3"))
print(str(2))
print(str(2.3))
print(b"hello".decode("ytf-8")) # 将bytes类型转换为string类型
>>> str1="abc" "xyz" #字符串的级联
>>> print(str1)
abcxyz
>>> str2="zbc"+"abc"
>>> print(str2)
zbcabc
>>> str3="abc"*3
>>> print(str3)
abcabcabc
基本格式: %[(name)][flags][width].[precision]typecode
(name):命名
flags: +,-,’ ‘或0。+表示右对齐;-表示左对齐;’ '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐,0表示使用0填充。
width表示显示宽度
precision表示小数点后精度
type:
%s
字符串(采用str()的显示)%r
字符串(采用repr()的显示)%c
单个字符
%b
二进制整数%d
十进制整数%i
十进制整数%o
八进制整数%x
十六进制整数
%e
指数(基底写为e)%E
指数(基底写为)%f
浮点数%F
浮点数,与上相同
%g
指数(e)_xO010或浮点数(根据显示长度)%G
指数(E)或浮点数(根据显示长度)
%%
字符"%”
示例:
str1 = "my name is %s,my sex is %s, my age is %s" % (name, sex, age)
>>>print(str1)
my name is zhihe,my sex is man, my age is 19
>>>num = 0.45234
>>>print("%.2f%%" % (num * 100)) #浮点数保留两位小数加个%
45.23%
str2 = "my name is {}, my sex is {}, my age is {}".format(name, sex, age)
print(str2)
# 指定顺序
str2 = "my name is {0}, my sex is {2}, my age is {1}".format(name, sex, age)
print(str2)
#指定别名
str2 = "my name is {uname}, my sex is {usex}, my age is {uage}".format(uname=name, usex=sex, uage=age)
print(str2)
–python3支持
print(f'my name is {name}, my sex is {sex}, my age is {age}')
>>> print(dir("abc")) # dir()查看字符串都有什么方法
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
lower()、upper():转换为小大写,不会改变原字符串,在需要忽略大小写时可用
print(f"判断是否全为大写:{‘ABC’.isupper()}")
print(“判断是否全为数字(不含中文数字):”, “123一”.isdigit()) # 可能并不准确
print(“判断是否全为数字(包含中文数字):”, “123一”.isnumeric())
print(“判断是否全为数字字母:”, “123abc”.isalnum())
print(“判断是否为标题格式(只有首字母大写):”, “The World”.istitle())
print(“判断是否全为字母(中文也算):”, “The World”.isalpha())
判断开头结尾,可以指定判断区间
print(“判断以xx开始:”, “xxxxxabc”.startswith(“xx”, 3, 6))
print(“判断以xx结尾:”, “xxxxxabc”.endswith(“xx”, 3, 6))
len():统计字符串长度
count():统计子字符串出现次数
>>> print("qqacqqq".count("qq")) # 不计算重合部分
2
自己实现count方法(需统计重合部分时去掉flag即可):
str1 = "aaaaqweqweqweasdad&^"
key = input("请输入要查找的字符串:")
#c表示key出现的次数
c = 0
#flag表示是否需要匹配
flag = 0
# 如果匹配成功,接下来的key长度的部分将不再匹配
for i in range(len(str1)):
if flag <= 0:
if str1[i:i + len(key)] == key:
flag = len(key)
c = c + 1
flag = flag - 1
print(c)
print(str1[1:20])
# 查找单个字符时可以用更简洁的方法
c = 0
key = input("请输入一个字符串:")
for i in str1: # 遍历字符串的每个字符
if (key == i):
c += 1
count()应用:查找出现次数最多的子串
str_max=""
c=0
for i in str1:
if (str1.count(i)>=c):
c=str1.count(i)
str_max=i
print(f"字符串{str1}中出现最多的字符是{str_max},出现了{c}次")
index():查看字符第一次出现的下标位置(下标从0开始),没有会报错
find():查看字符第一次出现的下标位置 没有返回-1
>>> print("qweqwe".index("q"))
0
>>> print("qweqwe".index("wq"))
Traceback (most recent call last):
File "" , line 1, in <module>
ValueError: substring not found
>>> print("qweqwe".index("we"))
1
>>> print("qweqwe".find("we"))
1
>>> print("qweqwe".find("wq"))
-1
split -默认是空白切割 --返回的是一个列表,是可变数据类型,id()查看内存空间
userinfo="liao:miao:20"
result=userinfo.split(":")
# 列表的切片和字符串一样
print(result[0])
>>> print(result[0:2])
['liao', 'miao']
>>> print(result[0:])
['liao', 'miao', '20']
将列表拼接成一个字符串
>>> print("*".join(result))
liao*miao*20
>>> print("".join(result))
liaomiao20
>>> result = "xxxyyy".replace("x","%") # 全部替换
>>> print(result)
%%%yyy
>>> print(result.replace("yy","*"))
%%%*y
>>> print("欢迎来到长沙".center(50,"*")) # 居中填充,50为填充后长度,“*”为填充字符
****************欢迎来到长沙****************
>>> print("1.登录".ljust(10,"*")) # 左对齐,制表格类的展示界面可用
1.登录**
>>> print("2.注册".rjust(10,"*")) # 右对齐
**2.注册
本篇文章主要介绍了python基本数据类型中的数值类型、布尔类型、字符串类型、NoneType和bytes类型。对字符串的日常使用和方法进行了讲解并含有较多示例。