是否有一个命令可以按数据类型对Python列表进行排序?

2024-05-16 21:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

给出以下列表:

l = [True, 3, 7.3, (5,6), True, 'orange', 25, 'banana', False, (4,5), 9.2]

它包含多种类型的混合物:

for element in l:
    print (type(element))

输出:

<class 'bool'>
<class 'int'>
<class 'float'>
<class 'tuple'>
<class 'bool'>
<class 'str'>
<class 'int'>
<class 'str'>
<class 'bool'>
<class 'tuple'>
<class 'float'>

有没有一个命令可以根据类型对它进行排序,也就是说,这些类型是成组的?你知道吗


Tags: falsetrue类型列表elementfloatclassint
3条回答

基于@omu\u negru的解决方案-

groups = dict()
for element in l:
    element_type = element.__class__.__name__
    if element_type not in groups:
        groups[element_type] = list()
    groups[element_type].append(element)
print(groups)
#  groups - {'bool': [True, True, False], 'float': [7.3, 9.2], 'int': [3, 25], 'str': ['orange', 'banana'], 'tuple': [(5, 6), (4, 5)]}

可以使用类型的字符串表示法进行排序:

>>> sorted(l, key=lambda x: str(type(x)))
[True, True, False, 7.3, 9.2, 3, 25, 'orange', 'banana', (5, 6), (4, 5)]

类似的类型将组合在一起,保持它们出现的初始顺序。你知道吗

在Python2中,类型对象可以直接排序,并且可以直接传递type作为键函数:

>>> sorted(l, key=type)
[True, True, False, 7.3, 9.2, 3, 25, 'orange', 'banana', (5, 6), (4, 5)]

更具可读性的解决方案是(连同密钥):

s = sorted([(x, x.__class__.__name__) for x in l], key=lambda x: x[1])
print(s)

相关问题 更多 >