Python新手求助:如何简化这段Bogo Sort代码?
简化Bogo Sort(随机排序)代码的方案
你的代码核心逻辑是通过同时随机打乱10个数组,直到其中一个和目标数组匹配,但存在大量重复冗余代码,以下是简化方案:
核心改进点
- 用列表生成式替代10次重复的数组定义
- 用循环批量处理数组打乱操作,避免重复调用
random.shuffle - 用
any()函数简化多数组匹配判断,替代冗长的or连接 - 修正变量名(避免使用Python内置函数名
sorted)和缩进问题
简化后的完整代码
import random # 目标排序数组 target_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] # 一次性创建10个初始候选数组 candidate_arrays = [[2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11] for _ in range(10)] attempt_count = 0 is_sorted = False while not is_sorted: # 批量打乱所有候选数组 for arr in candidate_arrays: random.shuffle(arr) attempt_count += 1 # 检查是否有候选数组匹配目标 if any(arr == target_array for arr in candidate_arrays): is_sorted = True # 输出结果 print(f"总尝试次数: {attempt_count}") for i, arr in enumerate(candidate_arrays): print(f"候选数组{i}: {arr}")
细节说明
- 列表生成式:
[[...] for _ in range(10)]一行就能创建10个相同初始值的数组,省去10行重复定义 - 批量打乱:通过for循环遍历
candidate_arrays,对每个数组执行打乱,替代10次重复的random.shuffle调用 - any()函数:
any(arr == target_array for arr in candidate_arrays)会逐个检查数组,只要有一个匹配就返回True,代码更简洁易读 - 变量规范:把原代码的
sorted改为is_sorted(避免覆盖Python内置的sorted()函数),x改为attempt_count,语义更清晰 - 缩进修复:原代码的while循环、if语句存在缩进错误,简化后的代码严格遵循Python缩进规则
内容的提问来源于stack exchange,提问作者William Robinson
相关产品推荐
相关产品推荐

