【问题标题】:How to sort the elements of a list based off associated index python如何根据关联索引python对列表的元素进行排序
【发布时间】:2022-11-26 22:36:54
【问题描述】:

我希望对大小为 n 的元素的 MyArray[] 进行排序,以便 MyArray[n] = n。如果缺少该元素,则应将其替换为 -1。这是一个例子: 输入:MyArray = [-1, -1, 6, 1, 9, 3, 2, -1, 4, -1] 输出:[-1, 1, 2, 3, 4, -1, 6, -1, -1, 9]

MyArray = [-1, -1, 6, 1, 9, 3, 2, -1, 4, -1]
MyArrayNew = []
for n in MyArray:
    if n <= len(MyArray):
         MyArrayNew[n] = n
    else:
         MyArrayNew[n] = -1
print(MyArrayNew)

到目前为止,这是我的代码,将不胜感激任何有关如何正确编码的指示!

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

    你犯了两个错误。

    1. 您使用 n 作为索引和值。从for循环可以看出n是MyArray列表中每个元素的值。但稍后当您调用MyArrayNew[n] 时,您将其用作索引。当n 为 -1 时,可能会发生一些您不希望发生的事情。
    2. 列表索引只有在它们已经存在时才能更改。 MyArrayNew开头是空的,所以你不能说:把第三个索引改成三,因为第三个索引还不存在。

      有很多方法可以解决这个问题。我给一个:

      为了解决第二个问题,我建议附加而不是分配索引。要解决第一个问题,您可以使用for i in range len(arr):,但我更喜欢枚举。

      我还将以另一种方式处理它:循环遍历索引并检查它是否应该是它的索引值,或者 -1。

      这导致以下代码:

      MyArray = [-1, -1, 6, 1, 9, 3, 2, -1, 4, -1]
      MyArrayNew = []
      for index, value in enumerate(MyArray):
          if index in MyArray:
              MyArrayNew.append(index)
          else:
              MyArrayNew.append(-1)
      
      print(MyArrayNew)
      

    【讨论】:

    • 太棒了,感谢您的帮助!
    【解决方案2】:

    我在python中知道的两种对数组进行排序的方法

    1. 一个到位排序:将 sort() 方法应用于您的数组 MyArray.sort()
    2. 第二种方法是使用嵌套的 FOR ... 循环并将数组中从索引 0 到最后一项的值进行比较。我通常使用临时值来保留以前的值,将其与当前值进行比较,并根据大小交换值。下面的示例代码
           for i in range(len(MyArray)):
                  #outer loop
                  for j in range(i+1, len(MyArray)):
                      #start from i+1,  why because you always want to compare the 
                           previous element with the current element in the outer loop
                      if(MyArray[i] > MyArray[j]):
                          temp = MyArray[i]
                          MyArray[i] = MyArray[j]
                          MyArray[j] = temp
               print(MyArray)   
      

    【讨论】:

    • 我明白了,这是有道理的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2020-09-07
    • 2018-07-08
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多