我有一个偶数和奇数的未排序数字列表 . 我需要按排序顺序隔离奇数和偶数 .
例如:
List = [5,6,4,7,11,14,12,1,3]
预期产量:
[4,6,12,14,1,3,5,7,11]
我的程序将奇数和偶数分开 .
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]
我试图使用插入排序对列表进行排序,无法得到正确的输出 . 任何方式轻松排序
7 回答
只需使用列表理解基础知识
制作一个均衡列表和赔率列表,然后合并:
或者使用
filter
,lambda
:如果你想避免使用外部库,我建议你这样做:
简单的解决方案:
使用list.sort / sorted的"smart"键功能:
将偶数映射到值
[0, n]
,将奇数映射到值[1, n]
,以便偶数数字按照自然顺序排在第一位 .如果您乐意使用第三方库,则可以使用
numpy
进行布尔索引 .numpy.lexsort以反向方式排序,即它在
A
之前考虑A % 2
:相关:Why NumPy instead of Python lists?
我们可以先对
n%2
(n模2)进行排序,对于奇数,它将为0,对于偶数,将为1,然后是数字本身:我们用作键的元组首先按照它们的第一个项目排序,然后按照它们的第二个项目排序 .
它也适用于负数......