如何实现验证随机排列无元素处于原位置的正确逻辑?
代码改进建议:检查随机排列是否无元素处于正确位置
原代码的核心问题
- 循环逻辑完全错误:
counter = counter+1写在return False之后,永远不会执行;只要第一个元素匹配索引就直接返回False,如果第一个元素不匹配,直接执行return True,完全没有遍历后续元素。 - 逻辑目标偏离:你的需求应该是判断随机排列中是否没有任何元素处于对应索引的位置(即错位排列),原代码只检查第一个元素就返回结果,完全不符合需求。
改进后的Python原生实现
用for循环遍历所有元素,只要发现任意元素等于其索引,立刻返回False;遍历完成后未发现匹配项,返回True:
import random # 实现生成随机排列的函数(补全你缺失的random_List逻辑) def random_List(n): lst = list(range(n)) random.shuffle(lst) return lst def not_correct_order(n): random_list = random_List(n) for idx, num in enumerate(random_list): if num == idx: return False return True
用NumPy实现的方案
如果你想用any()/all()简化代码,可以借助NumPy:
import numpy as np import random def random_List(n): lst = list(range(n)) random.shuffle(lst) return np.array(lst) def not_correct_order(n): random_arr = random_List(n) # 生成索引数组,比较每个元素是否匹配索引,判断是否存在正确位置的元素 has_correct_pos = (random_arr == np.arange(n)).any() # 取反得到「无元素在正确位置」的结果 return not has_correct_pos
np.arange(n)生成与随机数组长度一致的索引数组random_arr == np.arange(n)生成布尔数组,标记每个元素是否匹配对应索引.any()判断布尔数组中是否存在True,存在则说明有元素在正确位置,取反后返回目标结果
补充说明
np.isclose()用于浮点数的近似相等判断,这里是整数索引匹配,完全不需要使用该方法
内容的提问来源于stack exchange,提问作者Ahmad Morwat
相关产品推荐
相关产品推荐

