Python 数据类型

0. 整型(int)

作用: 用于加减乘除计算

print(1 + 1)

类型转换:

# 布尔值转整型
print(int(True))    # 输出:1
print(int(False))   # 输出:0

# 字符串转整型
print(int("666") + 1)   # 输出:667
print(int("0b1010011010",base=2))   # 二进制字符串转换成十进制整数,结果:666
print(int("0o1232",base=8))         # 八进制字符串转换成十进制整数,结果:666
print(int("0x29a",base=16))         # 十六进制字符串转换成十进制整数,结果:666

# 浮点数转换整型,会去掉小数
print(int(6.1))   # 输出:6

小知识

# 在python2中 9/2 等于 4 不能保留小数,如果想保留小数需要导入 division模块
from __future__ import division
print(9/2)

# 在python3中可以保留小数
print(9/2)  # 结果:4.5

1. 长整型

  • 在python2中数据类型有两种,int(整型),long(长整型),他们都是整型只是表示的范围不同
    • int,可表示的范围 :- 9223372036854775808~9223372036854775807
    • long,整数值超出int范围之后自动会转换为long类型(无限制)。
  • 在python3中去除了long,只剩下int(整型),并且int长度不在限制。

2. 浮点型(float)

浮点型一般用于小数

# 浮点型转换整型是会去掉小数
print(int(1.1))  # 结果:1

# round(),保留小数点后N位
num = 1.123456
res = round(num,3)  # 保留小数点后三位
print(res)

# 小数相加时会出现错误
num = 0.2
num2 = 0.1
num3 = num2 +num
print(num3) # 结果:0.30000000000000004

# 想要精确计算小数需要导入decimal模块
import decimal
v = decimal.Decimal("0.2")
v2 = decimal.Decimal("0.1")
v3= v + v2
print(v3)   # 结果:0.3

3. 布尔类型(bool)

  • 布尔类型只有两个值:真(True) 或 假(False)

布尔类型转换

  • int整数类型: 0转换成布尔类型为False,其它都为True。
  • str字符串类型、list列表类型、dict字典类型、tuple元组类型、set集合类型、:这5个类型只有在空的情况为False,其它都为True。

4 字符串(str)

# 判断类字符串,返回True或False
print("hello world".startswith("he"))   # startswith()判断是否以字符串 "he" 开头,返回 True或False
print("hello world".startswith("h",0,4))  #  判断是否以字符串 "h" 开头,并且在下标为0的字符串开始,下标为8的字符串结束
print("hello world".endswith("rld"))           #判断是否以字符串 "old" 结尾,返回 True或False ,在第4个开始,第8个结束
print(' '.isspace())             # 判断是不是空格
print('My Name Is'.istitle())    # 判断首字母是不是大写
print('ab'.islower())            # 判断是不是小写
print('My Name Is'.isupper())    # 判断是不是全是大写
print("aa".isidentifier())       # 判断是不是一个合法的标识符
print("10".isdigit())            # 判断是不是一个整数
print('33'.isnumeric())          # 判断是不是只有数字在里面
print("11".isalnum())            # 判断是不是阿拉伯数字加阿拉伯字符
print("jack".isalpha())          # 判断是不是纯英文字符
print("10".isdecimal())          # 判断是不是十进制


# strip(字符串)去除字符串两边的空格、换行符、制表符,也可以去除指定字符
v = " hello world "
print(v.strip())            # strip去除字符串两边的空格回车
print(v.lstrip())           # lstrip去除字符串左边的空格回车
print(v.rstrip())           # rstrip去除字符串右边的空格回车
print("16661".strip("1"))   # 去除指定字符"1"

# split(字符串) 字符串分割,分割后的字符串为列表,也可以指定字符串分割
print('hello world'.split())     # 按照空格分成列表
print('a,b,c'.split(",",1))  # 找到第一个逗号分割
print('hello,world'.split(","))  # 按照逗号分割
print('1+2\n3+4'.splitlines())   # 按换行来分

# replace(old,new) 字符串替换,形成新的字符串
print('aa bb cc'.replace('a','A')) #把a替换成大写a
print('aa bb cc'.replace('a','A',1)) #把a替换成大写a,只替换一个


# 字符串变大小写,不会修改原字符串
name = 'jaCK'
capitalize_name = name.capitalize() # 首字母大写
print(name,capitalize_name)

lower_name = name.lower()           # 把大写变成小写
print(name,lower_name)

upper_name = name.upper()             # upper()把小写变大写
print(name,upper_name)

swapcase_name = name.swapcase()       # 大写换小写,小写换大写
print(name,swapcase_name)

print('my name is jack'.title())  # 每个单词的首字母大写,输出:My Name Is Jack

# 字符串拼接,生成一个新字符串
print('+'.join(['1','2','3']))   # 根据join前面字符串拼接,输出:1+2+3

# 格式化字符串
print("my name is %s"%("jack"))
print("{v1} name is {v2}".format(v1="my",v2="jack1"))
f_name = "jack2"
print(f"my name is {f_name}")


# 字符串转字节
data = "张三"
print(data.encode("utf-8")) # 字符串转utf-8字节类型
print(data.encode("gbk")) # 字符串转gbk字节类型

print(b'\xe5\xbc\xa0\xe4\xb8\x89'.decode("utf-8"))  # utf-8字节类型转字符串
print(b'\xd5\xc5\xc8\xfd'.decode("gbk"))            # gbk字节类型转字符串



# 字符串居中,居左,居右显示。
aa = "aaaa"
print(aa.center(20,"-")) # 打印50个字符如果不够用-补齐把列表放中间
print("aa\taa".expandtabs(tabsize=30))  # 把tab键换成30个空格
print(aa.ljust(50,'*'))  # 保证长度50,不够的用*在后面补齐
print(aa.rjust(50,'-'))  # 证长度50,不够的用-在前面面补齐
print(aa.zfill(50))        # 不够的用0填充,用于处理二进制数据

# 字符串切片,字符串[start,end] :start 开始下标,从0开始,end 结束下标,最后一个下标不会输出
aaa = "abcdefghij"
print(aaa[4:8])     # 结果:efgh
print(aaa[-1])     # 最后一个,结果:j
print(aaa[:])     # 全部,结果:abcdefghij
print(aaa[3:])     # 从下标第3个开始到最后一个,结果:defghij
print(aaa[:3])     # 从下标0开始,到下标3结束,结果:abc

# [start:end:整数]步长,跳着取值,间隔几个整数取值
num = "123456789"
print(num[::])     # 结果:123456789
print(num[1::2])   # 在下标1开始取值,每间隔2个下标取一次,结果:2468
print(num[1::3])   # 在下标1开始取值,每间隔3个下标取一次,结果:258


# 查找下标,统计字符串
print("hello world".find("o"))       # 查找o的下标数,输出:4
print('hello world'.rfind('o'))      # 从左往走找到最右边的值返回下标 ,输出:7
print("hello world".count("l"))      # 统计有几个l,输出:3

print('My Name Is'.isprintable())#检查字符串中的所有字符是可打印字符还是空字符串。如果所有字符都是可打印的或为空字符串,则函数返回真,否则返回假。
# 字符串中可打印的字符包括字母和符号、数字、标点符号和空白。不可打印字符是指那些在打印时不可见且不占用空间的字符(转义字符,如' \n ',' \t ',' \r ',' \x16 ',' \xlf '等)。




# string.maketrans(x[, y[, z]]):
# maketrans方法用于创建字符映射转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。,常与translate方法配合使用实现字符串的替换、删除或重排
  # 两个字符串的长度必须相同,为一一对应的关系。
  # 参数:
  #   x -- 必需,字符串中要替代的字符组成的字符串。
  #   y -- 可选,相应的映射字符的字符串。
  #   z -- 可选,要删除的字符。
p = str.maketrans('abcdef','123456') # 把a替换成1,b替换2,c替换3,以此类推
print('alex li'.translate(p))  # 在p中找到对应的字符替换>>> 115 li

String1 = "abc"
String2 = "ghi"
String3 = "ab"
string = "abcdef"
print("Before Translation:", string)
mapping= string.maketrans(String1, String2, String3)
print(mapping)
# translate(table,/)  对字符串进行交换或过滤
print("After Translation:", string.translate(mapping))  #


intab = "aeiou"
outab = "12345"
trantab = str.maketrans(intab,outab)
s = "this is string example....wow!!!"
print(s)
print(s.translate(trantab))
#
# string.maketrans(from, to)   # -> from映射到to,所以要求两个字符串一样长, 两个都为空,则为全部字符,那么不会出现替换

5 列表(list)

列表(list),是一个有序可变的容器,可以存放多种不同元素类型的值。

5.1 创建列表

name = ["a",1,"c",True,"a","f"]
或
name = list(["a","b","c","d","a","f"])
name2 = ["1","2","3","4"]

5.2 添加

v = ["a","b","c","d","d"]
# appeng():列表结尾追加
v.append("end") # 在列表末尾添加
print(v)
# insert(位置下标,数据):指定位置添加
v.insert(1,"在a和b中间") # 在下标1的位置插入 "在a和b中间"
print(v)
# extend(数据):列表结尾追加数据,如何数据是一个列表,则将列表的数据逐一添加的列表
v.extend([1,2,3,4]) # 在v列表添加[1,2,3,4]列表
print(v)

5.3 删除

v = [1,2,3,4,5,6,7,8,9,10]
# pop():删除指定下标的数据,默认删除最后一个,
v.pop()     # 删除最后一个元素  删除,10
v.pop(3)    # 删除下标为3的字符 删除,4
print(v)    # 结果:[1, 2, 3, 5, 6, 7, 8, 9]
# remove():移除列表中某个数据的第一个匹配项
v.remove(3)   # 删除 3
print(v)    # 结果:[1, 2, 5, 6, 7, 8, 9]
# del:删除第一个或连续几个元素
del v[1]    # 删除下标为1的字符   删除,2
del v[1:3]  # 删除下标1到3的元素,不包含下标3的字符  删除,5, 6
print(v)    # 结果:[1, 7, 8, 9]
# clear():清空数据
v.clear()
print(v)    # 结果:[]

5.4 修改

# 修改指定下标的数据
v = ["a","b","c"]
v[0] = '1'  # 修改,把下标为0的字符串 改成 i
print(v)    # 结果:['1', 'b', 'c']

5.5 查询

v = [1,2,3,4,5,1,1,]
# 列表[下标]:查询列表下的元素
print(v[1]) # 查询下标为1的元素,输出:2
# index(元素):查询元素的下标
print(v.index(5)) # 查询5的下标,输出:4
print(v[v.index(5)]) # 根据5的下标查找5,输出:5
# count("元素"):查询元素的个数
print(v.count(1)) #统计有多少个1,输出:3

# 从后往前查询
list1= [1,2,3,4,5]
# 从前往后数下标是:0,1,2,3,4,最后一个值不取所有下标是5
print(list1[0:5])
# 从后往前数下标是:-1,-2,-3,-4,-5,最后一个值不取所有下标是-6
# 步长:整数从前往后步长,负数从后往前步长
print(list1[-1:-6:-1])

5.6 其他操作

v = ["a","b","c","d","e","f"]
# 切片
print(v[1])     # 输出列表下标为1的字符,结果:b
print(v[0:2])   # 切片,把小标0到2的字符都取出来,不包含2,结果:a,b
print(v[-1])    # -1 代表最后一个,结果:f
print(v[:2])    # name[:2]=name[0:2]  如果前面是0可以省略,结果:a,b
print(v[::2])   # [:]取全部,[::2],从第一个开始没两个取一次。
print("a" in v) # 判断 "a" 是否在列表里,存在返回 true 否则返回 false

v = ["a","b","c","d","e","f"]

# len()列表长度
print(len(v))

# reverse():反转
v.reverse()    # 反转列表
print(v)

# sort():排序,特殊符号 --> 数字 --> 大写字母 --> 小写字母
v.sort()
print(v)

# copy():复制模块
v1 = ["a","b",[1,2]]
v2 = v1.copy() # 浅复制 只复制列表的第一层
v1[2][1] = 0
print(v2,v1)

import copy # 引入模块
v3 = ["a","b",[1,2]]
v4 = copy.deepcopy(v3) # 深复制 完全复制一份
v3[2][1] = 0
print(v4,v3)

# 列表可以相加,相乘
list1 = [1,2,3] + [ 4,5,6]
print(list1)    # 结果:[1, 2, 3, 4, 5, 6]

list1 = [1,2,3] * 2
print(list1)    # 结果:[1, 2, 3, 1, 2, 3]

6.元组(tuple)

元组是一个有序且不可变的容器,可以存放多种不同类型的元素。

name = ("a",True,"c")
print(name[0])  # 结果:a

# (1) 和 (1,) 区别
  (1)  # 不会看成元组,是数字加了括号
  (1,) # 1后面有逗号,所以是元组

# 元组不能修改,但是元组中的列表可以修改。
v = ("a",1,[1,2,3],)
v[2].append(4)
print(v)  # 结果:('a', 1, [1, 2, 3, 4])

# 元组相加,相乘
tuple1 = (1,2,3) + (4,5,6)
print(tuple1)

tuple1 = (1,2,3) * 2
print(tuple1)

7.字典(dict)

字典是无序,键不重复的容器,字典以键值对{key:value}的方式保存。
字典的特性:

  • dict 是无序的
  • key 必须是唯一的,天生去重

7.1 创建字典

# 创建字典
dict1 = {}
dict2 = dict()
# 打印数据类型
print(type(dict1),type(dict2))

7.2 增加和修改

语法:字典[key] = value :如果值存在就修改,不存在就增加

dict1 = {}
# 添加数据
dict1["张三"] = ["张三",18]
print(dict1)    # {'张三': ['张三', 18]}

# 修改数据
dict1["张三"] = ["张三",26,13500000000]
print(dict1)    # {'张三': ['张三', 26, 13500000000]}

# update() 更新字典,如果key存在就更新值,不存在就添加
info = {"name":"张三","age":10}
info.update({"age":18,"sex":"男"})
print(info) # {'name': '张三', 'age': 18, 'sex': '男'}

7.3 删除数据

  • del:删除典中指定键值对
  • pop():删除典中指定键值对
  • popitem():随机删除
  • clear():清空字典
info = {"sut1":"aaaaa","sut2":"bbbbb","sut3":"ccccc","sut4":"ddddd"}

del info['sut1']       # 删除 sut1
print(info) # {'sut2': 'bbbbb', 'sut3': 'ccccc', 'sut4': 'ddddd'}

info.pop('sut2')       # 删除 sut2
print(info) # {'sut3': 'ccccc', 'sut4': 'ddddd'}

info.popitem()         # python3.6之前随机删除,3.6之后删除最后一个值,并返回
print(info) # {'sut3': 'ccccc'}

info.clear()           # 清空字典
print(info)# {}

7.4 查找

  • Key值查找
    • 语法:字典[key]
    • 缺点:如果字典中没有key值,则会报错。
info = { "name":"kaer" , "age":18}
print(info["name"]) # kaer
print(info["name2"]) # 保存
  • get():如果查找的key不存在则返回第二个参数(默认值),如果没写默认值,则返回None。
    • 语法:字典.get(key, 默认值),key存在返回key的值,不存在返回默认值
info = {"name": "kaer", "age": 18}
print(info.get("name"))  # kaer
print(info.get("name2"))  # None
print(info.get("name2", "name2不存在"))  # name2不存在,输出:"name2不存在"
  • keys():查找字典中所有的key,返回可迭代对象
info = {"name": "kaer", "age": 18}
print(info.keys())
  • values():查找字典中所有的value,返回可迭代对象
info = {"name": "kaer", "age": 18}
print(info.values())
  • items():把字典中每对键值对组成一个元组,并把这些元组放在列表中返回
info = {"name": "kaer", "age": 18}
# 把key赋值给k,把value赋值给v
for k, v in info.items():
    print(k, v)
  • fromkeys赋值
# 字典赋值
# [6,7,8] 字典的key,test字典的值
c = info.fromkeys([6, 7, 8], 'test')  # 创建一个字典
  • setdefault:setdefault()方法和get()方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
    • 语法:dict.setdefault(key, default=None)
info = {}
info.setdefault('北京', {'昌平': ['回龙观', '天通苑']})
print(info['北京'])
print(info['北京']['昌平'])

7.5 字典的遍历

info = {"name":"kaer", "age":18}

# 遍历key值
for k in info.keys():
    print("key值:",k," value值:",info[k])
# 遍历value值
for v in info.values():
    print("value值:",v)
# 遍历value值
for k,v in info.items():
    print("key值:",k,"value值:",v)

8.集合(set)

集合是一个无序,可变,不允许重复的容器。

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

8.1 创建集合

# 创建集合
s1 = {1,4,5,7,3,6,7,9}
s2 = set('abcd')
s3 = set()
# 打印 s1,s2,s3,数据类型
print(type(s1),type(s2),type(s3))
# 创建列表
list_1 = [1,4,5,7,3,6,7,9]
# 列表转换成集合
list_1 = set([list_1])  
list_2 = set([2,6,0,66,22,8,4])
list_3 = set([1,3,7])
list_4 = set([5,6,8])

8.2 增加数据

集合有去重功能,当追击的数据是集合中存在的,则不进行任何操作
存储原理:利用哈希函数(hash)将字符串转成一个数值如:8392831571661386736,再用这个值,做位运算取余,得到的余数是几就放到那个索引下。
只有能被哈希的数据类型,才能存入集合中。

# add():添加
list_3.add(100)
# update():追加的数据是序列
list_3.update([22,44,66])

# 查看哈希值
num = hash("张三")
print(num)

8.3 删除数据

# remove():删除集合中的指定数据,如果数据不存在会报错
list_4.remove(5)    # 删除5,没有会报错
# discard():删除集合中的指定数据,如果数据不存在,不会报错
list_3.discard(1)   # 删除1,没有不会报错
print(list_3,list_4)
# pop():随机删除集合中的某个数据,并返回这个数据。
list_3.pop()        #随机删
print(list_3)

8.4 查找数据

判断数据在集合序列中,返回True或False

# in:判断数据在集合序列
list1 = {1,2,3,4}
print(4 in list1)  # True

# not in:判断数据不在集合序列
print(4 not in list1)  # False

8.5 其他操作

list_1 = [1,4,5,7,3,6,7,9]
list_1 = set(list_1)
list_2 = set([2,5,6,0,66,22,8,4])
list_3 = set([1,3,7])
list_4 = set([5,6,8])
 
# 交集:把两个集合中相同的打印出来
print(list_1 & list_2)
print(list_1.intersection(list_2))
#并集:两个集合,合并,重复的只打印一次
print(list_1 | list_2)
print(list_1.union(list_2))
#差集:打印其他集合中不存在的数据
print(list_1 - list_2)
print(list_1.difference(list_2)) #list_1打印第list_2没有的数据
print(list_2.difference(list_1)) #list_2打印第list_1没有的数据
#子集:list_1集合中包含list_3
print(list_3.issubset(list_1))
#父集:list_2集合中包含list_4
print(list_2.issuperset(list_4))
#对称差集:list_1 和 list_2 集合中有相同的数据都不打印
print(list_1 ^ list_2) #合并重复的不打印
print(list_1.symmetric_difference(list_2))
#判断是否是交集:判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
print(list_3.isdisjoint(list_1))
 
#集合长度
print(len(list_3))

9. None类型

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值

10. 推导式

作用:用一个表达式创建一个有规律的列表和控制一个有规律列表。列表推导式又叫列表生成式。

10.1 列表推导式

while 循环实现

list0 = []
num = 0
while num < 10:
    list0.append(num)
    num += 1
print(list0)

for 循环实现

# 方法一:
list1 = []
for i in range(10):
    list1.append(i)
print(list1)
# 方法二:推导式
list2 = [i for i in range(10)]
print(list2)

带判断的列表推导式

# 需求:创建0-10的偶数列表
list3 = [i for i in range(10) if i % 2 == 0 and i != 0 ] # 带判断的推导式  
list4 = [i for i in range(0,10,2) if i != 0 ]   # 步长实现
print(list3)
print(list4)

列表推导式中写多个for循环

list5 = [(i,j) for i in range(4) for j in range(i) ]
print(list5)
# 相当于
list6 = []
for i in range(4):
    for j in range(i):
        list6.append((i,j))
print(list6)

10.2 字典推导式

# 字典推导式
dict0 = {i: i**2 for i in range(5)}
print(dict0)

合并两个列表

name = ["kaer","man",18]
title = ["name","gender","age"]
dict1 = {title[i]:name[i] for i in range(len(name))}
print(dict1)


提取字典中目标数据大于200的

counts = {"HP":202,"DELL":201,"MAC":199,"MBP":198}
countNum = {k:v for k,v in counts.items() if v >200}
print(countNum)

10.3 集合推导式

set0 = {i**2 for i in range(5)}
print(set0)
posted @ 2025-11-01 09:27  Amoヽ柠檬  阅读(1)  评论(0)    收藏  举报