【问题标题】:Sort list with None in Python getting the index在Python中使用None对列表进行排序以获取索引
【发布时间】:2017-09-20 00:54:55
【问题描述】:

如何在 Python 中使用None 值对列表进行排序以获取索引?

myList=['BAT46ZFILM', 'CMD17-21VGD/TR8', 'BAT46ZFILM', None, 'B72207S2321K311']

我知道

[i[0] for i in sorted(enumerate(myList), key=lambda x:x[1])]

获取排序方法的索引。但是如何将所有None 值放在最后。例如,与此解决方案合并:

sorted(myList, key=lambda x: (x is None, x))

使用None 值排序,但不给我索引。

【问题讨论】:

  • “获取索引”是什么意思?您的预期输出是什么?
  • 请给出预期的输出,问题目前还不清楚。
  • 或者将sorted(range(len(m)), key=lambda k: m[k]) 改成None放在最后。

标签: python python-2.7 sorting nonetype


【解决方案1】:

将两个条件(None 和字符串值)组合成元组并按元组排序:

[i[0] for i in sorted(enumerate(myList), key=lambda x:(x[1] is None, x[1]))]

【讨论】:

    【解决方案2】:

    使用

    sorted(range(len(m)), key=lambda k:(m[k] is None,  m[k]))
    

    【讨论】:

    • 更多关于这段代码在做什么的解释可能对 OP 有帮助...
    • 现在是我对 Python 的理解。此代码对范围向量进行排序,给出我的向量m ([1,2,3,...]),但要对其进行排序,请使用内联 (lambda) 函数定义的 key。在某种程度上,当在 sort 方法的迭代中找到 None 时,它不进行排序并保留 None 在最后。
    【解决方案3】:

    您实际上可以使用None 进行排序(仅供参考)

    >>> sorted([11, 33, 22, None])
    [None, 11, 22, 33]
    

    如果您想通过删除 None 对值进行排序:

    >>> a = [11, 33, 22, None]
    >>> sorted([i for i in a if i is not None])
    [11, 22, 33]
    

    【讨论】:

    • 谢谢,但我不能排除Nones。我在sortedsorted(range(len(m)), key=lambda k:(m[k] is None, m[k]))worked 中尝试了一些更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多