我必须对列表进行排序,使列表[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]
这个很接近但不准确
我尝试了很多,但无法理解这些样本输出是如何按顺序排列的,因为可能有多种解决方案。
我首先排序然后进行一些试验。 有人可以给出解释
答案 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]