想要基于a1 <= a2> = a3 <= a4> = a5 <= a6 ..... an的条件对列表进行排序

时间:2019-06-08 02:43:57

标签: python python-3.x

我想根据a1<=a2>=a3<=a4>=a5<=a6.....an

的条件对列表进行排序

输入:[a1,...,an](n个数字,不按顺序排列)
输出:ai1 <= ai2> = ai3 <= ai4> = ai5 <= ai6 ....

  

写代码输入:[a1,...,an](n个数字,不按顺序)返回ai1 <= ai2> = ai3 <= ai4> = ai5 <= ai6 ....
  验证代码(测试用例)
  输入列表= [1,4,7,9,1,3,5,10,11]   预期结果之一如下
  输出= 1,9,7,10,4,5,1,11,3

我尝试了以下代码:

l =[1,4,7,9,1,3,5,10,11]
s=[]
for i in range(0,len(l)-1):
    if i%2 ==0:
        if l[i]<= l[i+1]:
            s.append(l[i])
    else:
        if l[i] >= l[i+1]:
            s.append(l[i])
print(s)

输出如下:

[1, 7, 9, 1, 5]

1 个答案:

答案 0 :(得分:0)

输出中的第一件事,对于给定的测试用例,如何获得输出似乎没有逻辑。有许多可能的结果,并且测试用例的输出只是一种情况。您需要生成所有可能的结果还是任何一个都足够?

如果仅一个就足够了,下面的代码就可以正常工作。

l =[1,4,7,9,1,3,5,10,11]
l.sort()    # sort the array
s=[]
for i in range(len(l)//2):
    s.append(l[i])   # append some small value
    s.append(l[-i -1])    # append some large value
if len(l)%2:
    s.append(l[len(l)//2])   # for array with odd length
print(s)

>>> [1, 11, 1, 10, 3, 9, 4, 7, 5]

此代码不会产生测试用例输出,但会以O(len(l))时间复杂度生成有效的输出。