【问题标题】:Python How to sort a list of list with certain conditionsPython如何对具有特定条件的列表列表进行排序
【发布时间】:2015-03-28 00:01:16
【问题描述】:

我有列表列表,我想按字母顺序按 4 索引对列表进行排序,但在某些情况下它不会是空的或空的,所以这些情况需要放在底部。

为了进一步澄清 - 它应该按 AaBbCc 排序,然后是 None 或者如果没问题,则为空。我只希望第一个项目不区分大小写。

from   operator import itemgetter
list_of_list = [[0,1,2,3,'Ab'],[0,1,2,3,'bA'],[0,1,2,3,' '],[0,1,2,3,'None'], [0,1,2,3,''],[0,1,2,3,'Ca'] ]

list_of_list = sorted(list_of_list, key=itemgetter(4))

print list_of_list

Output: [[0, 1, 2, 3, ''], [0, 1, 2, 3, ' '], [0, 1, 2, 3, 'Ab'], [0, 1, 2, 3, 'Ca'], [0, 1, 2, 3, 'None'], [0, 1, 2, 3, 'bA']]

应该这样输出:

[[0, 1, 2, 3, 'Ab'], [0, 1, 2, 3, 'bA'],[0, 1, 2, 3, 'Ca'], [0, 1, 2, 3, 'None'], [0, 1, 2, 3, ''], [0, 1, 2, 3, ' ']]

【问题讨论】:

  • 'None' 是否意味着读取 None(不带引号?)
  • 两者 - 含义相同。所以要么是它的代表 None 的字符串,要么是实际的关键字 None。他们应该走到底部。
  • 您可以使用(isinstance(x[4], basestring) and x[4] != "None") 来避免None 字符串。

标签: list python-2.7 sorting


【解决方案1】:

你可以试试这个:

>>> list_of_list = [[0, 1, 2, 3, 'Ab'],
                    [0, 1, 2, 3, 'bA'],
                    [0, 1, 2, 3, ' '],
                    [0, 1, 2, 3, None],
                    [0, 1, 2, 3, ''],
                    [0, 1, 2, 3, 'Ca']]
>>> list_of_list = sorted(list_of_list,
                          key=lambda x: x[4] if isinstance(x[4], basestring) else "",
                          reverse=True)
>>> print list_of_list
[[0, 1, 2, 3, 'bA'], [0, 1, 2, 3, 'Ca'], [0, 1, 2, 3, 'Ab'], [0, 1, 2, 3, ' '], [0, 1, 2, 3, None], [0, 1, 2, 3, '']]

如果它是一个字符串,它的作用是使用第四个元素作为排序键,否则它将使用空字符串作为比较键。

或者,您可以将列表拆分为两个列表,只对第一个进行排序,然后像这样附加其余元素:

list_of_list = sorted(x
                      for x in list_of_list
                      if isinstance(x[4], basestring) and len(x[4].strip())) + \
               [x
                for x in list_of_list
                if not isinstance(x[4], basestring) or not len(x[4].strip())]
print list_of_list

产量

[[0, 1, 2, 3, 'Ab'], [0, 1, 2, 3, 'Ca'], [0, 1, 2, 3, 'bA'], [0, 1, 2, 3, ' '], [0, 1, 2, 3, None], [0, 1, 2, 3, '']]

尚不清楚是否需要遵循其他排序标准,而且这个解决方案也不是很漂亮,但至少它对前面的字符串进行排序,其余的保留在后面。

【讨论】:

  • 我在排序标准中添加了更多内容。几乎只是先按字母顺序排列字母,然后再按其他顺序。
猜你喜欢
  • 2021-07-26
  • 2013-03-31
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多