按类型排序 Python

Sorted by type in Python

假设我有一个对象列表。也许它有一些整数、一些字符串和一些浮点数。我想做的是对列表进行排序,以便所有整数都移动到列表的末尾,但没有其他类型被触及,有点像这样...

for idx, el in enumerate(somelist):
    if el.__class__ is int:
        somelist.append(somelist.pop(idx))

我的问题是,有没有一种方法可以优雅地单行执行此操作?

如果你不在乎如何做到位...

newlist = [i for i in somelist if not isinstance(x, int)] + [i for i in somelist if isinstance(x, int)]

很方便,因为 Python 2.2,排序是 stable,所以你也可以只做...

somelist.sort(key=lambda x: isinstance(x, int))

但是请注意,这确实意味着 int 的任何 子类 也将移至列表的末尾 - 如果您不希望这样,您想把条件改成type(x) is int).

布尔值可在 Python 中排序。而且排序稳定

..., key=lambda x: isinstance(x, int), ...

isinstance(x,int) 将是 TrueFalse 因此整数将移至末尾:

l = [1.0,"foo",2,3,"bar"]
print(sorted(l, key=lambda x: isinstance(x,int)))
[1.0, 'foo', 'bar', 2, 3]

也许这在其他方面会有用:

>>> a=[4,'3','2', 6,7,4,'ssa']
>>> for i,j in groupby(sorted(a, key=lambda x: str(type(x))), type):
...     tuple(j)
...
(4, 6, 7, 4)
('3', '2', 'ssa')
>>>