如何在Python中查找列表首次出现无序的位置
解决列表首次无序位置的问题
嘿,你的代码已经搭好了不错的基础,现在只需要补充记录首次无序位置的逻辑就能实现需求啦。下面是调整后的代码和详细说明:
问题分析
你的现有代码能判断列表是否有序,但没有记录首次出现无序的位置——我们需要在第一次发现list[i] < list[i-1]时,立刻记录这个位置的索引(也就是i-1,因为当前元素list[i]比前一个list[i-1]小,无序从list[i-1]之后开始),并且可以直接跳出循环,不用再检查后续元素(毕竟我们只需要首次位置)。
修改后的完整代码
# Function Definitions def start(): num_list = [] # 避免用list作为变量名,这是Python内置类型 for i in range(0,5): number = int(input("Enter a number: ")) num_list.append(number) flag = 0 first_out_of_order_index = -1 # 初始化首次无序位置为-1(表示未发现) i = 1 while i < len(num_list): if num_list[i] < num_list[i-1]: flag = 1 first_out_of_order_index = i - 1 # 记录首次无序的前一个元素索引 break # 找到首次位置后直接跳出循环,不用继续检查 i += 1 if not flag : print("This list of numbers is true.") else: # 补充输出首次无序的位置 print(f"This list of numbers is false. List became out of order at list[{first_out_of_order_index}]") sorted_list = sorted(num_list, reverse=False) print("True Version:", sorted_list) return flag # Main Program start1 = start()
关键修改点
- 新增了
first_out_of_order_index变量,专门用来存储首次无序的位置索引,初始值设为-1表示未发现无序情况。 - 当第一次检测到无序时,给
first_out_of_order_index赋值为i-1(因为当前元素num_list[i]比前一个元素小,无序的起始点是前一个元素的位置),然后用break终止循环,确保只记录首次位置。 - 在输出语句中用f-string格式化输出位置,符合你要的
list[0]这种格式。 - 把变量名
list改成了num_list,避免和Python内置的list类型重名,这是个好习惯哦。
测试示例
比如输入列表[10,4,5,8,10],程序会输出:
This list of numbers is false. List became out of order at list[0]
True Version: [4, 5, 8, 10, 10]
完全符合你的需求~
内容的提问来源于stack exchange,提问作者Nebula
相关产品推荐
相关产品推荐

