在 Python 中获取一个多位数的每一位数字,可以通过以下两种常用方法实现,我们以数字 12345 为例:


方法一:字符串转换法(直观易懂)

number = 12345
# 转换为字符串后遍历每个字符
digits = [int(d) for d in str(number)]
print(digits)  # 输出: [1, 2, 3, 4, 5]

原理

  1. 将数字转为字符串 "12345"
  2. 遍历字符串的每个字符 '1', '2', '3', '4', '5'
  3. 将每个字符转回整数

特点

  • ✅ 代码简洁
  • ✅ 直观易理解
  • ❌ 需要处理负号(如 -123 需要先取绝对值)

方法二:数学运算法(高效内存友好)

number = 12345
digits = []

# 处理负数(可选)
num = abs(number)

# 通过循环取余和整除获取每一位
while num > 0:
    digits.append(num % 10)  # 获取最后一位
    num = num // 10          # 去掉最后一位

digits.reverse()  # 反转列表得到正确顺序
print(digits)     # 输出: [1, 2, 3, 4, 5]

原理

  1. 通过 % 10 取余获取最后一位(如 12345 % 10 = 5
  2. 通过 // 10 去掉最后一位(如 12345 // 10 = 1234
  3. 重复直到数字为0
  4. 反转结果列表(因为获取顺序是逆序的)

特点

  • ✅ 内存效率高(适合超大数字)
  • ✅ 纯数学运算
  • ❌ 需要处理反转顺序

特殊场景处理

  1. 处理负数

    number = -123
    digits = [int(d) for d in str(abs(number))]  # 输出 [1, 2, 3]
    
  2. 处理零

    number = 0
    digits = [0]  # 直接返回 [0]
    
  3. 从右向左获取数字(不反转):

    # 数学方法直接获取逆序
    number = 12345
    digits = []
    while number > 0:
        digits.append(number % 10)  # 输出 [5, 4, 3, 2, 1]
        number = number // 10
    

两种方法对比

特性 字符串法 数学法
代码简洁性 ⭐⭐⭐⭐ (更简单) ⭐⭐⭐
内存效率 ⭐⭐ (需生成字符串) ⭐⭐⭐⭐ (直接操作数字)
执行速度 适合普通场景 适合超大数字(如万位以上)
适用场景 快速实现、调试 性能敏感型任务

最终选择建议:

  • 如果是日常使用或数字位数较少 → 字符串法
  • 如果处理超大数据(如百万位)→ 数学法