列表在Python中排序

时间:2017-10-03 18:56:38

标签: python sorting

我必须对列表进行排序,使列表[0]<列表[1]>列表[2]<列表[3]>列表[5] ...

示例:输入[1,7,2,1,3,5] O / p:[1,5,2,3,1,7] 输入:[5,2,9,8,7,11,1] O / p:[2,9,1,11,5,8,7]

#sort the array
arr.sort()

# Swap adjacent elements
for i in range(0,n-1,2):
    arr[i], arr[i+1] = arr[i+1], arr[i]

这个很接近但不准确

我尝试了很多,但无法理解这些样本输出是如何按顺序排列的,因为可能有多种解决方案。

我首先排序然后进行一些试验。 有人可以给出解释

3 个答案:

答案 0 :(得分:0)

这不会得到与您期望的完全相同的输出,但符合排序条件

arr = [5,2,9,8,7, 11, 1]
#sort the array
arr.sort()

for i in range(0, len(arr)-1):
    if(i % 2 != 0):
        arr[i], arr[i+1] = arr[i+1], arr[i]
print(arr)

答案 1 :(得分:0)

使用for-loop

首先sort() list正如您所做的那样。然后loop切换index的{​​{1}}。您需要从pairs循环到1,以便length - 2。如果您从list[0] < list[1] index开始,那么结果将是0您的要求所声明的算法输出结果。

以下代码应list[0] > list[1] < list[2] ...正确显示以这种方式可以implement的列表。

sorted

给出:

arr = [5, 2, 9, 8, 7, 11, 1]

arr.sort()    
for i in range(1, len(arr)-2, 2):
   arr[i], arr[i+1] = arr[i+1], arr[i]

N,N-。正如评论中所指出的,[1, 5, 2, 8, 7, 9, 11] 应该是<,并且说明中的<=>与某些>= input相同,排序算法无法应用。

答案 2 :(得分:0)

您应该能够对列表进行排序,将其拆分为高值和低值,然后将它们拼接在一起。

import itertools

def weirdsort(lst):
    lst.sort()
    pivot = len(lst) // 2
    lowers = lst[:pivot]
    highers = lst[pivot:]

    return list(itertools.chain.from_iterable(zip(lowers, highers)))

如评论中所述,给出的排序规则允许多个正确答案。这会产生weirdsort([1,7,2,1,3,5]) -> [1,3,1,5,2,7],仍然满足list[0] < list[1] > list[2] < list[3] > list[5]