我想以波形形式对数组进行排序,但它说 int 不可下标

问题描述

这是我的代码

def wave(arr):
  for indx,el in enumerate(arr):
    if indx != 0 and indx%2 == 0:
      if el[indx] < el[indx-1]:
        arr[indx-1],arr[indx]= arr[indx],arr[indx-1]
      if el[indx] < el[indx+1]:
        arr[indx],arr[indx+1]= arr[indx+1],arr[indx]
  return arr

li = [3,5,12,3]
print(wave(li))

在这里使用的逻辑是将偶数元素与其侧元素进行比较并相应地交换。

解决方法

如果您检查 el 变量的类型,您可以看到它是一个整数 (<class 'int'> )。所以你尝试这样做:int[int]。这是无意义的,在 Python 中是不可能的。

你可以检查一下:

def wave(arr):
    for indx,el in enumerate(arr):
        print(type(el))  # <class 'int'>
        ....

我试图找出你的期望(你没有在你的问题中写下你的期望),我已经写了一个带有几条注释的工作代码。

代码:

def wave(arr):
    for indx,el in enumerate(arr):
        # If the index is not zero AND the element is even AND element is not the last one
        if indx != 0 and indx % 2 == 0 and indx != len(arr) - 1:
            if arr[indx] < arr[indx - 1]:  # If the left side is greater
                arr[indx - 1],arr[indx] = arr[indx],arr[indx - 1]
            if arr[indx] < arr[indx + 1]:  # If the right side is greater
                arr[indx],arr[indx + 1] = arr[indx + 1],arr[indx]
    return arr


li = [3,5,12,3]
print(wave(li))  # expected: [3,3]

li = [3,15,3,8]
print(wave(li))  # expected: [3,8]

输出:

>>> python3 test.py
[3,3]
[3,8]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...