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

Python入门编程题:将列表中奇数替换为后续首个偶数

Python程序:将列表中的奇数替换为后续第一个可用偶数

需求说明

给定一个整数列表,需要将每个奇数元素替换为它之后第一个出现的偶数元素;如果该奇数之后没有偶数,则保留原奇数。例如:

输入列表:[9,7,30,10,17,50,13]
处理后列表:[30,30,30,10,50,50,13]


方法一:基础遍历实现

这种方法逻辑直观,适合小规模列表:

def replace_odds_with_next_even(lst):
    # 复制原列表避免修改原始数据
    result = lst.copy()
    list_length = len(result)
    
    for i in range(list_length):
        # 判断当前元素是否为奇数
        if result[i] % 2 != 0:
            # 从当前位置的下一个元素开始查找第一个偶数
            for j in range(i + 1, list_length):
                if result[j] % 2 == 0:
                    result[i] = result[j]
                    break  # 找到后立即停止查找
            # 若后续无偶数,保持原奇数不变
    return result

# 测试示例
original = [9, 7, 30, 10, 17, 50, 13]
processed = replace_odds_with_next_even(original)
print(processed)  # 输出: [30, 30, 30, 10, 50, 50, 13]

方法二:优化版(适合大列表)

先预处理所有偶数的位置和值,避免重复遍历,提升效率:

def replace_odds_with_next_even_optimized(lst):
    # 收集所有偶数的索引和对应值
    even_records = []
    for idx, num in enumerate(lst):
        if num % 2 == 0:
            even_records.append((idx, num))
    
    # 如果列表中没有偶数,直接返回原列表副本
    if not even_records:
        return lst.copy()
    
    result = lst.copy()
    even_count = len(even_records)
    current_even_ptr = 0  # 指向当前可用的偶数记录
    
    for i in range(len(result)):
        if result[i] % 2 != 0:
            # 找到第一个索引大于当前位置的偶数
            while current_even_ptr < even_count and even_records[current_even_ptr][0] <= i:
                current_even_ptr += 1
            # 如果找到符合条件的偶数,替换当前奇数
            if current_even_ptr < even_count:
                result[i] = even_records[current_even_ptr][1]
    return result

# 测试示例
original = [9, 7, 30, 10, 17, 50, 13]
print(replace_odds_with_next_even_optimized(original))  # 输出: [30, 30, 30, 10, 50, 50, 13]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:15:26