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
相关产品推荐
相关产品推荐

