【问题标题】:Is there a command which will sort a Python list by data type?是否有一个命令可以按数据类型对 Python 列表进行排序?
【发布时间】:2017-11-07 14:18:54
【问题描述】:

给定以下列表:

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'>

是否有一个命令可以根据类型对其进行排序,也就是说,类型会分组吗?

【问题讨论】:

  • 只是出于好奇.. 你有那个列表而不是一个对象有什么原因吗?
  • 实际上,我正在使用类型数量少得多的东西,这让我想知道这是否可能。

标签: python python-3.x


【解决方案1】:

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

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

类似的类型将被分组在一起,保持它们出现的初始顺序。

在Python 2中,类型对象可以直接排序,可以直接传递type作为key函数:

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

【讨论】:

    【解决方案2】:

    一个更易读的解决方案是(连同键):

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

    【讨论】:

      【解决方案3】:

      以@omu_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)]}
      

      【讨论】:

        猜你喜欢
        • 2020-11-03
        • 2019-03-10
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 2019-09-26
        相关资源
        最近更新 更多