Python之基础数据类型(一)


基本数据类型

总览

  • 数值类型:整数int 浮点数float 复数conplex (python2中还有long)
  • 字符串类型 string
  • 布尔型 bool
  • NoneType
  • bytes类型
  • 列表
  • 元组
  • 字典
  • 集合
  • (没有设置常量类型)但约定俗成常量名大写

可变数据类型:列表、字典和集合

不可变数据类型:数字、字符串、元组

数值类型

整数型 int
浮点型 float
# 浮点型 带小数点 不精确 因为小数部分用2的负数次方表示,有的不能完全表示准确
# 精度:float64位>float32位
decimal类型(非基本数据类型)

需要通过字符串或整数来初始化Decimal对象,而不是直接使用浮点数。这样可以确保精确性,并避免浮点数舍入误差的问题。

# decimal类型,完全精确 因为小数部分也是完全用的二进制表示
from decimal import Decimal
money=Decimal("3.212")
print(money)
复数 conplex
# 复数
a=-5+4j
print(a.real)#实部,存储为浮点型
print(a.imag)#虚部,存储为浮点型

布尔类型 bool

‘’, 0, 0.0, (), [],{},None, False 为假
True – 1
False – 0

可以参与计算

>>> print(True+False+True+True+False)
3

NoneType

None是一个特殊的常量,表示一种特殊的数据类型(NoneType)

bytes类型

在 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() 函数用于将字符转换为相应的整数值。

字符串类型 string

​ --不可变数据类型,内存空间上的值不可变

赋值
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%
format格式化
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():转换为小大写,不会改变原字符串,在需要忽略大小写时可用

判断系列 --is --返回True/False

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 "<stdin>", line 1, in <module>
ValueError: substring not found
>>> print("qweqwe".index("we"))
1
>>> print("qweqwe".find("we"))
1
>>> print("qweqwe".find("wq"))
-1
切割 split()

split -默认是空白切割 --返回的是一个列表,是可变数据类型,id()查看内存空间

userinfo="liao:miao:20"
result=userinfo.split(":")
# 列表的切片和字符串一样
print(result[0])
>>> print(result[0:2])
['liao', 'miao']
>>> print(result[0:])
['liao', 'miao', '20']
拼接 join()

将列表拼接成一个字符串

>>> print("*".join(result))
liao*miao*20
>>> print("".join(result))
liaomiao20
替换 replace()
>>> result = "xxxyyy".replace("x","%")		# 全部替换
>>> print(result)
%%%yyy
>>> print(result.replace("yy","*"))
%%%*y
填充 -center -ljust -rjust
>>> print("欢迎来到长沙".center(50,"*"))		# 居中填充,50为填充后长度,“*”为填充字符
****************欢迎来到长沙****************
>>> print("1.登录".ljust(10,"*"))				# 左对齐,制表格类的展示界面可用
1.登录**
>>> print("2.注册".rjust(10,"*"))				# 右对齐
**2.注册

小结

本篇文章主要介绍了python基本数据类型中的数值类型、布尔类型、字符串类型、NoneType和bytes类型。对字符串的日常使用和方法进行了讲解并含有较多示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值