在奇数和偶数隔离列表中对奇数和偶数进行排序/分组

Gop*_*opi 5 python sorting

我有一个未排序的偶数和奇数数字列表。我需要按排序顺序分隔奇数和偶数。

例如:

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)

我试图使用插入排序对列表进行排序,但无法获得正确的输出。有什么方法可以轻松排序

ffe*_*rri 8

使用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, ...]


Shi*_*ith 5

添加到@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)