根据项目是奇数还是偶数对列表进行排序

时间:2015-10-13 02:54:42

标签: python list sorting

我正在尝试根据数字是奇数还是偶数(甚至获得更高优先级)对数字列表进行排序。 示例:

a=[1,2,3,4] 
a.sort(key=org(a)) sorted will produce [2,4,1,3]. I want to use the sort method 

def org(a):
    for i in range(len(a)):
        if a[i]%2==0:
            b.append(a[i])
            b.sort()
    else:
        c.append(a[i])
        c.sort()
    print(b+c)

我从运行a.sort(key = org(a))

中得到此错误
Traceback (most recent call last):
File "<pyshell#80>", line 1, in <module>
a.sort(key=org(a))
TypeError: 'list' object is not callable

我意识到每次排序都会让它变慢。我可以采用哪种方式而不必在每次循环后进行排序?

3 个答案:

答案 0 :(得分:7)

按照&#34;均匀度排序&#34;然后按大小,您可以使用返回tuple

的函数
>>> a=[1,2,3,4] 
>>> a.sort(key=lambda x: (x % 2, x))
>>> a
[2, 4, 1, 3]

要首先对奇数条目进行排序,您可以简单地否定模数的值。这是一种有用的技巧,可以反转一般的数字字段。

>>> a.sort(key=lambda x:(-(x % 2), x))
>>> a
[1, 3, 2, 4]

答案 1 :(得分:2)

看起来你走在正确的轨道上:

a = [1,2,3,4]
>>> sorted(a,key=lambda x: x%2)
[2, 4, 1, 3]

此处sorted是一个返回已排序列表的函数。正如约翰所说,你也可以使用sort方法。显然,如果您的原始列表没有排序,sorted将无效,那么您必须这样做:

a = [3,2,1,4]
a.sort()
newList = sorted(a,key=lambda x: x%2)

此时John的代码可能更清晰。也可以通过sorted来实现sorted(a,key=lambda x: (x%2,x))功能。

答案 2 :(得分:0)

one can use helper function from intertools 

def partition_by_pred(pred, iterable):
    from itertools import tee, filterfalse
    t1, t2 = tee(iterable)
    return filterfalse(pred, t1), filter(pred, t2)

l, r = partition_by_pred(lambda x: False if x % 2 == 0  else True ,[1,2,3,4]  )

print(*l,*r)

2 4 1 3