
本文介绍在 python 中检查一个整数是否包含某个特定数字的多种方法,重点讲解字符串转换法的原理与实现,并对比数学分解法的适用场景,同时指出常见误区与性能注意事项。
本文介绍在 python 中检查一个整数是否包含某个特定数字的多种方法,重点讲解字符串转换法的原理与实现,并对比数学分解法的适用场景,同时指出常见误区与性能注意事项。
在 Python 中,整数(int)是不可迭代的数值类型,因此不能直接使用 in 操作符判断某位数字是否存在——例如 if 1 in 1111: 会触发 TypeError: argument of type 'int' is not iterable。正确做法是将整数和目标数字统一转换为字符串后进行子串查找,这是最简洁、可读性最强且适用于绝大多数场景的方案:
a = 1111
digit = 1
if str(digit) in str(a):
print("Yes")
else:
print("No") # 输出:Yes
该方法本质是利用字符串的成员检测逻辑:str(a) 将 1111 转为 "1111",str(digit) 将 1 转为 "1",而 "1" in "1111" 返回 True。
✅ 优势:代码简短、语义清晰、天然支持负数(如 str(-456) → "-456",检查 "5" 仍有效)、自动处理前导零无关性(1000 和 10000 均正确识别 '0')。
⚠️ 注意事项:
- 若需严格匹配「独立数字位」(如排除负号干扰或避免误判多位数),需额外处理。例如检查 -123 中是否含 2 是安全的,但若目标是「作为独立十进制位出现」,当前方法已足够;
- 不要误用 int 的 in 操作——它仅对可迭代对象(如 list, str, tuple)有效;
- 对于超大整数(如数千位),字符串转换仍高效;若在高频循环中执行,可预先缓存 str(a) 避免重复转换。
? 进阶:纯数学解法(无字符串转换)
适用于嵌入式或严格禁止字符串操作的场景:
def contains_digit(n: int, d: int) -> bool:
if d 9:
raise ValueError("d must be a single digit (0–9)")
n = abs(n) # 忽略符号
if n == 0:
return d == 0
while n > 0:
if n % 10 == d:
return True
n //= 10
return False
# 示例
print(contains_digit(1111, 1)) # True
print(contains_digit(-456, 5)) # True
print(contains_digit(789, 0)) # False
此方法通过取模(% 10)和整除(// 10)逐位提取数字,时间复杂度为 O(log₁₀n),空间复杂度 O(1),但代码更冗长,可读性较低。
? 总结:日常开发中,str(digit) in str(number) 是首选方案——它准确、健壮、符合 Python 的“显式优于隐式”哲学。仅在特殊约束下才考虑数学分解法。务必避免直接对 int 使用 in,这是新手常见语法误区。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











