【问题标题】:Sort order of lists in multidimensional array in PythonPython中多维数组中列表的排序顺序
【发布时间】:2014-04-30 20:14:57
【问题描述】:

我想在 Python 中转换这些数据(按字母顺序排序):

test = [['ma', 'e', 'wa', 'ka'], ['ma', 'haa', 'laa'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra'], ['ma', 'ra'], 'ma']

进入一个多维数组,其中的项目按每个列表中的项目数量排序,如下所示:

test = ['ma', ['ma', 'ra'], ['ma', 'haa', 'laa'], ['ma', 'e', 'wa', 'ka'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra']]

如果您只看长度,我希望它从 [4, 3, 8, 2, 1] 变为 [1, 2, 3, 4, 8] 但我不一定想要具体到这个例子的解决方案。

【问题讨论】:

    标签: python arrays sorting multidimensional-array


    【解决方案1】:
    test = sorted(test, key=lambda x: len(x) if type(x)==list else 1)
    

    我试过了:

    >>> test = [['ma', 'e', 'wa', 'ka'], ['ma', 'haa', 'laa'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra'], ['ma', 'ra'], 'ma']
    >>> test = sorted(test, key=lambda x: len(x) if type(x)==list else 1)
    >>> test
    ['ma', ['ma', 'ra'], ['ma', 'haa', 'laa'], ['ma', 'e', 'wa', 'ka'], ['ma', 'ka', 'm', 'haa', 'laa', 'ca', 'j', 'ra']]
    

    唯一奇怪的是,并非原始列表中的所有元素都是列表,您包括字符串和列表,这就是为什么我必须添加条件 if type(x)==list else 1

    【讨论】:

    • 我建议将您的意思是单个列表的项目转换为实际列表。您将避免分散在整个代码中的特殊处理,如此处所示。此外,这就是你的意思。
    【解决方案2】:

    一种解决方案:

    sorted(test, key=lambda x: isinstance(x,list) and len(x) or 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2019-08-21
      • 1970-01-01
      相关资源
      最近更新 更多