【Python】Python数据类型及其方法详解
1. Python 基本数据类型的分类
根据 Python 官方文档(Built-in Types)和参考资源(如 W3Schools),Python 的基本数据类型可以分为以下几类:
-
数值类型(Numeric Types):
- 整数(
int):无限精度的整数。 - 浮点数(
float):带小数点的实数。 - 复数(
complex):形如a + bj的复数。 -
序列类型(Sequence Types):
- 字符串(
str):Unicode 字符序列。 - 列表(
list):可变序列。 - 元组(
tuple):不可变序列。 - 范围(
range):生成整数序列,常用于循环。 -
集合类型(Set Types):
- 集合(
set):无序、不重复的可变集合。 - 冻结集合(
frozenset):不可变集合。 -
映射类型(Mapping Types):
- 字典(
dict):键值对存储,键为不可变类型。 -
布尔类型(Boolean Type):
- 布尔值(
bool):True或False。 -
空值类型(NoneType):
- 空值(
None):表示缺失或无值。 -
二进制序列类型(Binary Sequence Types):
- 字节(
bytes):不可变二进制序列。 - 字节数组(
bytearray):可变二进制序列。
以下将逐一介绍每种数据类型及其方法,包含示例和应用场景。
2. 基本数据类型及其方法
每种数据类型支持特定的方法,用于操作和处理数据。以下是详细的方法列表,基于 Python 3.13 文档和 W3Schools 参考(如 String Methods)。
2.1 数值类型
整数(int)
42、-123。bit_length():返回二进制表示的位数。bit_count():计算二进制中 1 的个数(Python 3.10+)。to_bytes(length, byteorder, *, signed=False):转换为字节。from_bytes(bytes, byteorder, *, signed=False):从字节构造整数(类方法)。as_integer_ratio():返回整数的分数表示(如 (42, 1))。x = 42
print(x.bit_length()) # 输出:6(42 的二进制为 101010)
print(x.to_bytes(2, 'big')) # 输出:b'\x00*'
浮点数(float)
3.14、-0.001。as_integer_ratio():返回分数表示。is_integer():检查是否为整数(如 3.0 返回 True)。hex():返回十六进制表示。fromhex(s):从十六进制字符串构造(类方法)。x = 3.0
print(x.is_integer()) # 输出:True
print(x.as_integer_ratio()) # 输出:(3, 1)
复数(complex)
3 + 4j。conjugate():返回共轭复数。real:实部。imag:虚部。z = 3 + 4j
print(z.conjugate()) # 输出:(3-4j)
print(z.real, z.imag) # 输出:3.0 4.0
2.2 序列类型
序列类型支持通用操作(如 len()、in、索引、切片),详见 Common Sequence Operations。
字符串(str)
"hello",不可变。capitalize():首字母大写。lower()、upper():转换为小写/大写。strip([chars]):移除两侧字符。split(sep=None, maxsplit=-1):按分隔符分割。join(iterable):连接字符串。replace(old, new[, count]):替换子串。find(sub[, start[, end]]):查找子串索引。format(*args, **kwargs):格式化字符串。isalnum()、isalpha()、isdigit() 等:检查字符类型。removeprefix(prefix)、removesuffix(suffix):移除前/后缀(3.9+)。s = " Hello, World! "
print(s.strip()) # 输出:Hello, World!
print(s.split(",")) # 输出:[' Hello', ' World! ']
print(s.lower()) # 输出: hello, world!
print("-".join(["a", "b", "c"])) # 输出:a-b-c
列表(list)
[1, 2, 3]。append(x):添加元素。extend(iterable):扩展列表。insert(i, x):插入元素。remove(x):移除第一个匹配元素。pop([i]):弹出元素。clear():清空列表。index(x[, start[, end]]):查找索引。count(x):计数。sort(*, key=None, reverse=False):排序。reverse():反转。copy():浅拷贝。lst = [1, 2, 2, 3]
lst.append(4) # [1, 2, 2, 3, 4]
lst.remove(2) # [1, 2, 3, 4]
lst.sort(reverse=True) # [4, 3, 2, 1]
print(lst) # 输出:[4, 3, 2, 1]
元组(tuple)
(1, 2, 3)。count(x):计数。index(x[, start[, end]]):查找索引。t = (1, 2, 2, 3)
print(t.count(2)) # 输出:2
print(t.index(3)) # 输出:3
范围(range)
range(5) 表示 0, 1, 2, 3, 4。start、stop、step)。r = range(1, 10, 2)
print(list(r)) # 输出:[1, 3, 5, 7, 9]
print(r.start, r.stop, r.step) # 输出:1 10 2
2.3 集合类型
集合(set)
{1, 2, 3}。add(x):添加元素。remove(x):移除元素,失败抛 KeyError。discard(x):移除元素,失败不报错。pop():随机弹出元素。clear():清空。copy():浅拷贝。union(*others):并集。intersection(*others):交集。difference(*others):差集。symmetric_difference(other):对称差集。update(*others):更新并集。intersection_update(*others):更新交集。difference_update(*others):更新差集。symmetric_difference_update(other):更新对称差集。isdisjoint(other):检查无交集。issubset(other):检查子集。issuperset(other):检查超集。s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
print(s.union({3, 5})) # 输出:{1, 2, 3, 4, 5}
print(s.intersection({2, 3, 5})) # 输出:{2, 3}
冻结集合(frozenset)
frozenset([1, 2, 3])。set,但无修改方法(add、remove 等),包括:
copy()、union()、intersection()、difference()、symmetric_difference()、isdisjoint()、issubset()、issuperset()。fs = frozenset([1, 2, 3])
print(fs.union({3, 4})) # 输出:frozenset({1, 2, 3, 4})
2.4 映射类型
字典(dict)
{"a": 1, "b": 2}。clear():清空。copy():浅拷贝。fromkeys(iterable, value=None):从可迭代对象创建字典。get(key[, default]):获取值,键不存在返回默认值。items():返回键值对视图。keys():返回键视图。values():返回值视图。pop(key[, default]):弹出键值对。popitem():弹出最后插入的键值对。setdefault(key[, default]):获取值,键不存在设置默认值。update([other]):更新字典。d = {"a": 1, "b": 2}
print(d.get("c", 0)) # 输出:0
d.update({"c": 3})
print(d) # 输出:{'a': 1, 'b': 2, 'c': 3}
print(list(d.keys())) # 输出:['a', 'b', 'c']
2.5 布尔类型
布尔值(bool)
True 或 False,是 int 的子类。int 的方法(如 bit_length()),但通常不直接使用。b = True
print(b.bit_length()) # 输出:1(True 视为 1)
2.6 空值类型
空值(None)
x = None
print(x is None) # 输出:True
2.7 二进制序列类型
字节(bytes)
b"hello"。str):
decode(encoding='utf-8', errors='strict'):解码为字符串。hex():返回十六进制表示。fromhex(s):从十六进制字符串构造。find()、replace() 等,类似字符串方法。b = b"hello"
print(b.decode()) # 输出:hello
print(b.hex()) # 输出:68656c6c6f
字节数组(bytearray)
bytes,额外支持:
append(x):添加字节。extend(iterable):扩展字节。clear()、pop() 等。ba = bytearray(b"hello")
ba.append(33) # 添加 '!'
print(ba) # 输出:bytearray(b'hello!')
3. 实际应用场景
int 的位操作、float 的科学计算)。str:文本处理、日志记录。list:动态数据存储、算法实现。tuple:固定数据结构、函数多返回值。range:循环迭代。4. 注意事项
-
可变与不可变:
- 可变类型:
list、set、dict、bytearray。 - 不可变类型:
int、float、complex、str、tuple、range、frozenset、bytes。 - 不可变类型操作会创建新对象,注意内存使用。
-
性能优化:
- 使用
str.join()而非+拼接字符串。 - 使用
list.extend()而非多次append()。 dict.get()比直接访问键更安全高效。-
版本兼容性:
- 如
str.removeprefix()(3.9+)、int.bit_count()(3.10+)。 - 检查 Python 版本以确保方法可用。
-
方法适用性:
- 某些方法(如
list.sort())修改原对象,其他(如str.upper())返回新对象。 - 注意方法参数,如
dict.get(key, default)的默认值。
5. 总结表
以下是基本数据类型及其代表性方法的总结:
| 数据类型 | 代表性方法示例 | 特点 |
|---|---|---|
int |
bit_length(), to_bytes() |
无限精度整数 |
float |
as_integer_ratio(), is_integer() |
浮点数,支持小数 |
complex |
conjugate(), real, imag |
复数,属性为主 |
str |
split(), join(), upper(), format() |
文本处理,方法丰富 |
list |
append(), sort(), remove(), extend() |
可变序列,操作灵活 |
tuple |
count(), index() |
不可变,方法少 |
range |
无方法,支持索引切片 | 循环序列生成 |
set |
add(), union(), intersection() |
无序可变集合 |
frozenset |
union(), intersection() |
不可变集合 |
dict |
get(), keys(), values(), update() |
键值存储,方法全面 |
bool |
无特定方法,继承 int 方法 |
布尔逻辑 |
None |
无方法 | 空值表示 |
bytes |
decode(), hex() |
不可变二进制 |
bytearray |
append(), extend(), decode() |
可变二进制 |
6. 学习资源
7. 总结
Python 的基本数据类型涵盖数值、序列、集合、映射、布尔、空值和二进制类型,每种类型提供丰富的方法支持各种操作。掌握这些类型和方法是 Python 编程的基础,建议通过实践(如文本处理、数据结构操作)加深理解。对于初学者,可从常用方法(如 str.split()、list.append()、dict.get())入手,逐步探索高级功能。
作者:彬彬侠