我有一个未排序的偶数和奇数数字列表。我需要按排序顺序分隔奇数和偶数。
例如:
List = [5,6,4,7,11,14,12,1,3]
Run Code Online (Sandbox Code Playgroud)
预期输出:
[4,6,12,14,1,3,5,7,11]
Run Code Online (Sandbox Code Playgroud)
我的程序用于分隔奇数和偶数。
L = [5,6,4,7,11,14,12,1,3]
def segregateEvenOdd(L):
left,right = 0,len(L)-1
while left < right:
while (L[left]%2==0 and left < right):
left += 1
while (L[right]%2 == 1 and left < right):
right -= 1
if (left < right):
L[left],L[right] = L[right],L[left]
left += 1
right = right-1
print segregateEvenOdd(L)
output : [12, 6, 4, 14, 11, 7, 5, 1, 3]
Run Code Online (Sandbox Code Playgroud)
我试图使用插入排序对列表进行排序,但无法获得正确的输出。有什么方法可以轻松排序
使用list.sort / sorted的键函数:
>>> list(sorted(lst, key=lambda x: [x % 2, x]))
[4, 6, 12, 14, 1, 3, 5, 7, 11]
Run Code Online (Sandbox Code Playgroud)
将偶数映射n到 value [0, n],将奇数映射n到 value [1, n],以便根据列表项的自然顺序,偶数排在前面,即[0, ...]排在前面[1, ...]。
添加到@fferi的答案。
如果您想要偶数后跟奇数,每个都按升序排列,请执行以下操作:
>>> lst=range(10)
>>> sorted(lst, key = lambda x:(x%2, x))
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
奇数后偶数,每个按升序排列
>>> sorted(lst, key = lambda x:(not x%2, x))
[1, 3, 5, 7, 9, 0, 2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)
偶数后奇数,每个按降序排列
>>> sorted(lst, key = lambda x:(not x%2, x), reverse=True)
[8, 6, 4, 2, 0, 9, 7, 5, 3, 1]
Run Code Online (Sandbox Code Playgroud)
奇数后偶数,每个按降序排列
>>> sorted(lst, key = lambda x:(x%2, x), reverse=True)
[9, 7, 5, 3, 1, 8, 6, 4, 2, 0]
Run Code Online (Sandbox Code Playgroud)