使用if语句合并有效迭代的算法简化

2024-09-24 04:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码有一个小错误,但是执行了我认为是插入排序的操作。我有两个问题 1.为什么在运行时发生索引错误? 2.为了教学和学习的目的,我如何简化整个代码,合并for循环的使用。我想有人解释一下它们重复的地方,以及它们如何对应于使用循环的解决方案。 *我意识到我需要使用I和j来使用嵌套循环,但还不太清楚如何使用。我已经添加了外部级别的循环,它为循环的长度提供了I

代码:

def main():
  #test with 6125
  #test with 0142
  #test with 4312
  #test with 5432

  list=[4,2,6,1]
  print(list)
  for i in range(len(list)):
    #checking first element
    if list[i+1]<list[i]:
      temp1=list[i]
      list[i]=list[i+1]
      list[i+1]=temp1
      print("first iteration:",list)
    #Checking second element
    if list[i+2]<list[i]:
        temp1=list[i]
        list[i]=list[i+2]
        list[i+2]=temp1
        print("second iteration:",list)

    if list[i+2]>list[i]:
      if list[i+2]<list[i+1]:
        temp2=list[i+1]
        list[i+1]=list[i+2]
        list[i+2]=temp2
        print("second iteration else #1:",list)
    #Checking Third element
    if list[i+3]<list[i]:
        temp1=list[i]
        temp2=list[i+1]
        temp3=list[i+2]
        list[i]=list[i+3]
        list[i+1]=temp1
        list[i+2]=temp2
        list[i+3]=temp3

        print("third iteration:",list)
    elif list[i+3]>list[i]:
      if list[i+3]<list[i+1]:
        temp1=list[i+1]
        temp2=list[i+2]
        temp3=list[i+3]
        list[i+1]=temp2
        list[i+2]=temp3
        list[i+3]=temp1
        print("third iteration else #1:",list)
      elif list[i+3]>list[i+1]:
        if list[i+3]<list[i+2]:
          temp3=list[i+2]
          list[i+2]=list[i+3]
          list[i+3]=temp3
          print("third iteration else #2!",list)
main()

输出#1:

#Test with [4, 2, 6, 1]
('first iteration:', [2, 4, 6, 1])
('third iteration:', [1, 2, 4, 6])
**IndexError:** list index out of range on line 54 in main.py

输出测试#2

#Test with [5, 4, 3, 2]
('first iteration:', [4, 5, 3, 2])
('second iteration:', [3, 5, 4, 2])
('second iteration else #1:', [3, 4, 5, 2])
('third iteration:', [2, 3, 4, 5])

代码的小饰物可在此处找到(用于在线修复) https://trinket.io/python/fb5116c1ed

注意:我意识到python可以在不使用临时变量的情况下执行此操作,但我希望使用它们实现解决方案。在任何答案中,请使用现有的和我最初提供的代码进行分解


Tags: 代码testifmainwithelselistfirst
1条回答
网友
1楼 · 发布于 2024-09-24 04:28:17

最外层的for循环很混乱,导致了问题。显式地遍历列表的四个元素,进行所有必要的检查。但是,您可以先增加i,然后尝试对元素1到4重复此过程,最后对元素2到5以及元素3到6重复此过程

你没有超过3的元素,这是你的错误。我怀疑你只需要去掉这个循环

我禁用了循环,将i保持为0,并且程序在您编写的范围内运行正常

相关问题 更多 >