You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除列表中数字的首个5?求无外部库的最优实现方案

移除列表中每个数字的首个5的最优实现方法

方法一:字符串处理法(推荐)

利用字符串的查找和切片操作,是最直观且代码简洁的实现方式,不需要复杂的数学计算,可读性拉满。

实现步骤:

  • 将每个数字转为字符串
  • 找到第一个'5'的位置
  • 截取该位置之后的子串,再转回整数
  • 若数字中没有5,则保持原数

代码示例:

s = [5542, 5654, 7545]
result = []
for num in s:
    str_num = str(num)
    first_five_pos = str_num.find('5')
    if first_five_pos != -1:
        new_num = int(str_num[first_five_pos + 1:])
    else:
        new_num = num
    result.append(new_num)

print(result)  # 输出: [542, 654, 745]

如果追求更简洁的写法,可以用列表推导式一行搞定:

s = [5542, 5654, 7545]
result = [int(str(n)[str(n).find('5')+1:]) if '5' in str(n) else n for n in s]

方法二:纯数学计算法(无字符串操作)

如果不想依赖字符串转换,可以通过数字拆分重组的方式实现,适合对字符串操作有顾虑的场景。

实现步骤:

  • 将数字拆分为高位到低位的数字列表
  • 找到第一个5的位置并移除
  • 将剩余数字重新组合为整数

代码示例:

s = [5542, 5654, 7545]
result = []

for num in s:
    # 拆分数字为高位到低位的列表
    digits = []
    temp = num
    while temp > 0:
        digits.append(temp % 10)
        temp = temp // 10
    digits = digits[::-1]
    
    # 定位第一个5的位置
    first_five_idx = None
    for idx, d in enumerate(digits):
        if d == 5:
            first_five_idx = idx
            break
    
    # 重组数字
    if first_five_idx is not None:
        new_digits = digits[:first_five_idx] + digits[first_five_idx+1:]
        new_num = 0
        for d in new_digits:
            new_num = new_num * 10 + d
    else:
        new_num = num
    result.append(new_num)

print(result)  # 输出: [542, 654, 745]

最优方案选择

字符串处理法无论在代码简洁度、可读性还是实现效率上都更胜一筹,是大多数场景下的最优选择。除非有严格的无字符串操作要求,否则优先推荐字符串处理的实现方式。

内容的提问来源于stack exchange,提问作者Somethingwhatever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:01:01