前言
在 Python 中,数据类型用于定义变量或常量可以存储什么类型的数据。
Python 是一种动态类型语言,变量的类型是在运行时自动推断的,但了解常见的数据类型仍然非常重要。
Python 支持多种数据类型,适合处理不同类型的数据。
以下是常见数据类型的总结:
类型类别 | 数据类型 | 描述 |
---|---|---|
数值类型 | int , float , complex |
整数、浮点数、复数 |
字符串类型 | str |
文本数据 |
布尔类型 | bool |
True 或 False |
序列类型 | list , tuple , range |
列表、元组、范围 |
集合类型 | set , frozenset |
集合、冻结集合 |
映射类型 | dict |
字典 |
其他类型 | bytes , bytearray , NoneType |
二进制数据、空值等 |
以下是 Python 中常见的数据类型分类和详细说明。
基本数据类型
数值类型(Numeric Types)
数值类型用于存储数值数据。Python 支持三种数值类型:
整数(int):
- 示例:
123
,-456
,0
- 描述:表示整数值,可以是正数、负数或零,没有大小限制。
- 示例代码:
1
2a = 10
print(type(a)) # 输出: <class 'int'>
- 示例:
浮点数(float):
- 示例:
3.14
,-0.007
,1.0e3
(科学计数法) - 描述:表示带小数点的数值,支持科学计数法。
- 示例代码:
1
2b = 3.14
print(type(b)) # 输出: <class 'float'>
- 示例:
复数(complex):
- 示例:
2 + 3j
,-4j
- 描述:表示实部和虚部的组合,虚部用
j
表示。 - 示例代码:
1
2c = 2 + 3j
print(type(c)) # 输出: <class 'complex'>
- 示例:
字符串(String Type)
字符串是用于存储文本数据的类型。
- 示例:
"Hello, World!"
,'Python'
,"""多行字符串"""
,'''多行字符串'''
- 描述:
- 使用单引号
'
、双引号"
或三引号'''
或"""
定义字符串。 - 三引号用于多行字符串或保留格式。
- 使用单引号
- 示例代码:
1
2s = "Hello, Python"
print(type(s)) # 输出: <class 'str'>
布尔类型(Boolean Type)
布尔类型用于表示逻辑值 True
或 False
。
- 示例:
True
,False
- 描述:
True
和False
是 Python 的关键字。- 布尔类型常用于条件判断。
- 示例代码:
1
2flag = True
print(type(flag)) # 输出: <class 'bool'>
序列类型
序列类型用于存储一组有序的元素。
Python 支持多种序列类型,最常见的是列表、元组和范围。
列表(List)
列表是一个可变的、有序的元素集合。
- 示例:
[1, 2, 3]
,["apple", "banana", "cherry"]
,[1, "text", 3.14]
- 描述:
- 列表中的元素可以是不同类型。
- 列表是可变的,支持添加、删除和修改元素。
- 示例代码:
1
2my_list = [1, 2, 3]
print(type(my_list)) # 输出: <class 'list'>
元组(Tuple)
元组是一个不可变的、有序的元素集合。
- 示例:
(1, 2, 3)
,("apple", "banana")
,(1, "text", 3.14)
- 描述:
- 元组中的元素可以是不同类型。
- 元组是不可变的,创建后不能修改。
- 示例代码:
1
2my_tuple = (1, 2, 3)
print(type(my_tuple)) # 输出: <class 'tuple'>
范围(Range)
范围是表示一个连续整数序列的不可变类型。
- 示例:
range(10)
,range(2, 10, 2)
- 描述:
range(start, stop, step)
表示从start
到stop
(不包括stop
)的整数序列,步长为step
。
- 示例代码:
1
2my_range = range(5)
print(type(my_range)) # 输出: <class 'range'>
集合类型
集合类型用于存储一组无序且唯一的元素。
集合(Set)
集合是一个无序的、不重复的元素集合。
- 示例:
{1, 2, 3}
,{"apple", "banana", "cherry"}
- 描述:
- 集合中的元素是唯一的,不能重复。
- 集合是可变的,支持添加和删除元素。
- 示例代码:
1
2my_set = {1, 2, 3}
print(type(my_set)) # 输出: <class 'set'>
冻结集合(Frozenset)
冻结集合是一个不可变的集合类型。
- 示例:
frozenset({1, 2, 3})
- 描述:
- 冻结集合中的元素是唯一的,不能重复。
- 冻结集合是不可变的,创建后不能修改。
- 示例代码:
1
2my_frozenset = frozenset({1, 2, 3})
print(type(my_frozenset)) # 输出: <class 'frozenset'>
映射类型
映射类型用于存储键值对。Python 中最常见的映射类型是字典。
字典(Dictionary)
字典是一个可变的、无序的键值对集合。
- 示例:
{"name": "Alice", "age": 25}
,{1: "one", 2: "two"}
描述:
- 字典的键必须是不可变的类型(如字符串、数字或元组)。
- 字典的值可以是任何类型。
- 示例代码:
1
2my_dict = {"name": "Alice", "age": 25}
print(type(my_dict)) # 输出: <class 'dict'>
其他数据类型
字节(Bytes)
字节类型用于表示二进制数据。
- 示例:
b'hello'
,b'\x41\x42\x43'
- 描述:
- 字节类型是不可变的。
- 示例代码:
1
2my_bytes = b'hello'
print(type(my_bytes)) # 输出: <class 'bytes'>
字节数组(Bytearray)
字节数组类型是字节类型的可变版本。
- 示例:
bytearray(b'hello')
- 描述:
- 字节数组是可变的。
- 示例代码:
1
2my_bytearray = bytearray(b'hello')
print(type(my_bytearray)) # 输出: <class 'bytearray'>
空类型(NoneType)
None
表示没有值或空值。
- 示例:
None
- 描述:
None
是 Python 中的一个特殊类型,用于表示空值。
- 示例代码:
1
2null_value = None
print(type(null_value)) # 输出: <class 'NoneType'>
类型转换
Python 支持多种类型的转换,如:
int()
: 将其他类型转换为整数。float()
: 将其他类型转换为浮点数。str()
: 将其他类型转换为字符串。list()
: 将其他类型转换为列表。tuple()
: 将其他类型转换为元组。set()
: 将其他类型转换为集合。dict()
: 将其他类型转换为字典。
示例
1 | num = 5 |
相关的方法
字典方法
方法 | 描述 |
---|---|
clear() | 删除字典中的所有元素 |
copy() | 返回字典的副本 |
fromkeys() | 返回拥有指定键和值的字典 |
get() | 返回指定键的值 |
items() | 返回包含每个键值对的元组的列表 |
keys() | 返回包含字典键的列表 |
pop() | 删除拥有指定键的元素 |
popitem() | 删除最后插入的键值对 |
setdefault() | 返回指定键的值。如果该键不存在,则插入具有指定值的键。 |
update() | 使用指定的键值对字典进行更新 |
values() | 返回字典中所有值的列表 |
在 Python 中,字典是一种非常灵活的数据结构,可以存储键值对。
要获取字典中的值或操作字典的属性,你可以使用几种不同的方法。
以下是一些常用的方法来获取字典中的属性和操作字典的内容:
获取字典中的值
使用键访问值
你可以使用字典的键来直接访问对应的值:
1 | my_dict = {"name": "Alice", "age": 30, "city": "New York"} |
使用 get()
方法
get()
方法用于安全地获取字典中的值,如果键不存在,可以返回一个默认值(默认为 None
):
1 | age = my_dict.get("age") |
检查键是否存在
使用 in
关键字可以检查一个键是否在字典中:
1 | if "name" in my_dict: |
获取所有键、值或键值对
获取所有键:使用 keys()
方法
1 | keys = my_dict.keys() |
获取所有值:使用 values()
方法
1 | values = my_dict.values() |
获取所有键值对:使用 items()
方法
1 | items = my_dict.items() |
遍历字典
你可以遍历字典的键、值或键值对:
遍历键和值
1 | for key in my_dict: |
遍历键值对
1 | for key, value in my_dict.items(): |
数组
Python中集合类型是没有数组的。
Python 内置的 array
模块提供了一种更高效的数组实现,可以指定元素类型。
但是,它的长度也是动态的,和 list
类似。
1 | import array |
列表
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
列表排序
1 | sort_list = sorted(lineList, key=lambda x: x[0]) |
列表中的高频字符串
你可以使用 Python 中的 collections.Counter
来获取字符串列表中出现最多的字符串及其比例。
以下是一个示例代码:
1 | from collections import Counter |
说明
- Counter:
Counter
类会生成一个字典,键为字符串,值为对应的出现次数。 - most_common:
most_common(1)
返回出现次数最多的字符串及其次数。 - 比例计算:通过将出现次数除以总字符串数来计算比例。
集合Set
方法 | 描述 |
---|---|
add() | 向集合添加元素。 |
clear() | 删除集合中的所有元素。 |
copy() | 返回集合的副本。 |
difference() | 返回包含两个或更多集合之间差异的集合。 |
difference_update() | 删除此集合中也包含在另一个指定集合中的项目。 |
discard() | 删除指定项目。 |
intersection() | 返回为两个其他集合的交集的集合。 |
intersection_update() | 删除此集合中不存在于其他指定集合中的项目。 |
isdisjoint() | 返回两个集合是否有交集。 |
issubset() | 返回另一个集合是否包含此集合。 |
issuperset() | 返回此集合是否包含另一个集合。 |
pop() | 从集合中删除一个元素。 |
remove() | 删除指定元素。 |
symmetric_difference() | 返回具有两组集合的对称差集的集合。 |
symmetric_difference_update() | 插入此集合和另一个集合的对称差集。 |
union() | 返回包含集合并集的集合。 |
update() | 用此集合和其他集合的并集来更新集合。 |
元组
方法 | 描述 |
---|---|
count() | 返回元组中指定值出现的次数。 |
index() | 在元组中搜索指定的值并返回它被找到的位置。 |
Python和JSON类型映射
支持类型的映射
Python 类型 | JSON 类型 | 描述 |
---|---|---|
dict |
object |
Python 的字典类型对应 JSON 的对象格式。 |
list , tuple |
array |
Python 的列表或元组对应 JSON 的数组格式。 |
str |
string |
Python 的字符串对应 JSON 的字符串类型。 |
int , float |
number |
Python 的整数或浮点数对应 JSON 的数值类型。 |
True |
true |
Python 的布尔值 True 对应 JSON 的 true 。 |
False |
false |
Python 的布尔值 False 对应 JSON 的 false 。 |
None |
null |
Python 的 None 对应 JSON 的 null 值。 |
不支持类型转换
set/range
在 Python 中,set
和 range
类型虽然在 Python 内部非常有用,但它们并不是直接支持 JSON 序列化的默认类型。
因此,在将 set
和 range
转换为 JSON 时,需要先将它们转换为 JSON 支持的类型(如 list
)。
set
1 | import json |
range
1 | import json |
bytes
在 Python 中,bytes
类型表示一组不可变的字节序列。由于 JSON 是一种文本格式,它本身不直接支持二进制数据。因此,要将 bytes
类型的数据序列化为 JSON,需要先将其转换为 JSON 支持的文本格式,如 str
或 base64
编码的字符串。
以下是几种常见的处理方法:
1. 使用 base64
编码
base64
编码是一种将二进制数据编码为文本字符串的方法,适合用于 JSON 序列化。
示例
1 | import json |
输出
1 | "SGVsbG8sIFdvcmxkIQ==" |
2. 转换为十六进制字符串
另一种方法是将 bytes
转换为十六进制字符串。
示例
1 | import json |
输出
1 | "48656c6c6f2c20576f726c6421" |
3. 转换为 UTF-8 字符串
如果 bytes
数据是 UTF-8 编码的文本,可以直接解码为字符串。
示例
1 | import json |
输出
1 | "Hello, World!" |
总结
方法 | 适用场景 | 示例输出 |
---|---|---|
base64 编码 |
通用,适用于任何二进制数据 | "SGVsbG8sIFdvcmxkIQ==" |
十六进制字符串 | 需要处理二进制数据的特定应用 | "48656c6c6f2c20576f726c6421" |
UTF-8 字符串解码 | 数据为 UTF-8 编码的文本 | "Hello, World!" |
选择哪种方法取决于具体的应用需求和数据特性。
对于通用的二进制数据,推荐使用 base64
编码,因为它广泛支持且效率高。