前言
在 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 编码,因为它广泛支持且效率高。