【CodeWars】刷题之The Poet And The Pendulum

介个题目有点长,大致意思是
1.给定了一个数组
2.要求将数组中最小的元素放在中间位置,第二小的元素放在它的右边,第三小的 元素放在最小元素的左边,以此类推。

def pendulum(values):
    for i in range(len(values)):
        for j in range(i+1,len(values)):
            if values[i]>values[j]:
                values[i],values[j]=values[j],values[i]
    if len(values)%2==0:
        i=len(values)/2
    else:
        i=len(values)//2+1
    result=[0]*len(values)
    result[i]=values[0]
    step=1
    for j in range(1,len(values),2):
        result[i+step]=values[j]
        result[i-step]=values[j+1]
        step=step+1
    
    return result

个人的粗鄙代码直接在这边,直观上很容易理解,就是按照题目要求的步骤写
但不知为何报错

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    Test.assert_equals(pendulum([4,6,8,7,5]), [8,6,4,5,7])
  File "/home/codewarrior/solution.py", line 14, in pendulum
    result[i+step]=values[j]
IndexError: list assignment index out of range

希望各位路过的大神能够在评论区不吝赐教

接着是平台上大神的代码

def pendulum(values):
    values=sorted(values)
    
    return values[::2][::-1]+values[1::2]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值