微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我想以波形形式对数组进行排序,但它说 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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?