gpt4 book ai didi

python - 自然地对列表进行排序,将字母数字值移动到末尾

转载 作者:太空狗 更新时间:2023-10-30 02:07:53 24 4
gpt4 key购买 nike

我有一个要自然排序的字符串列表:

c = ['0', '1', '10', '11', '2', '2Y', '3', '3Y', '4', '4Y', '5', '5Y', '6', '7', '8', '9', '9Y']

除了自然排序,我想把所有不是纯数字字符串的条目都移到最后。我的预期输出是这样的:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '2Y', '3Y', '4Y', '5Y', '9Y']

请注意,所有内容都必须进行 natsort - 甚至是字母数字字符串。

我知道我可以使用 natsort 包来获得我想要的东西,但仅此一项并不能满足我的需要。我需要使用两个 排序调用来执行此操作 - 一个用于自然排序,另一个用于将非纯数字字符串移动到末尾。

import natsort as ns
r = sorted(ns.natsorted(c), key=lambda x: not x.isdigit())

print(r)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '2Y', '3Y', '4Y', '5Y', '9Y']

我想知道是否可以巧妙地使用 natsort 并将其简化为单个排序调用。

最佳答案

natsort有一个函数 natsort_key 将项目转换为基于完成排序的元组。

因此您可以将其用作:

sorted(c, key=lambda x: <b>(</b>not x.isdigit()<b>, *ns.natsort_key(x))</b>)

这会产生:

>>> sorted(c, key=lambda x: (not x.isdigit(), *ns.natsort_key(x)))
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '2Y', '3Y', '4Y', '5Y', '9Y']

您也可以在没有迭代拆包的情况下使用它,因为在那种情况下我们有两个 2 元组,如果第一个项目出现平局,它将比较 natsort_key 的结果。调用:

sorted(c, key=lambda x: (not x.isdigit(), ns.natsort_key(x)))

关于python - 自然地对列表进行排序,将字母数字值移动到末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com