如何解决我想以波形形式对数组进行排序,但它说 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 举报,一经查实,本站将立刻删除。