当前位置: 首页 > 面试题库 >

在python中排序-如何对包含字母数字值的列表进行排序?

仇经武
2023-03-14
问题内容

我有一个包含以下详细信息的列表:

list1 = ["1", "100A", "342B", "2C", "132", "36", "302F"]

现在,我想对该列表进行排序,以使这些值按以下顺序排列:

list1 = ["1", "2C", "36", "100A", "132", "302F", "342B"]

list1.sort()显然,这样做并不能给出正确的答案-它给出了:

list1 = ["1", "100A", "132", "2C", "36", "302F", "342B"]

我假设这是因为python直接将所有这些都视为字符串。但是,我想根据它们的数值FIRST对它们进行排序,然后根据数字后面的字符对它们进行排序。

我该如何进行?

非常感谢 :)


问题答案:

您想使用 自然排序

import re

_nsre = re.compile('([0-9]+)')
def natural_sort_key(s):
    return [int(text) if text.isdigit() else text.lower()
            for text in re.split(_nsre, s)]

用法示例

>>> list1 = ["1", "100A", "342B", "2C", "132", "36", "302F"]
>>> list1.sort(key=natural_sort_key)
>>> list1
['1', '2C', '36', '100A', '132', '302F', '342B']

通过将元素拆分为多个列表以分离出数字并将它们作为整数而不是字符串进行比较来起作用:

>>> natural_sort_key("100A")
['', 100, 'a']
>>> natural_sort_key("342B")
['', 342, 'b']

请注意,仅当您始终将int与int和字符串与string进行比较时,这才在Python3中起作用,否则会出现TypeError: unorderabletypes异常。



 类似资料:
  • 问题内容: 我正在尝试对字符串列( 包含数字 )进行排序。 您会看到Mysql的自然排序算法放在后面( 对于大多数应用程序来说都可以 ),但是我有独特的需求,因此我希望结果应该像这样排序。 仅使用SQL 是否可能,或者我必须在应用程序级别操纵结果集? 问题答案: 继续 假设 它始终为WORD_space_NUMBER,这应该可行: 使用POSITION查找空间,使用SUBSTRING捕获其后的数字

  • 问题内容: 我知道这听起来微不足道,但是我没有意识到 的功能很奇怪。我有一个实际上是字符串形式的“数字”列表,因此我先将它们转换为整数,然后尝试进行排序。 给我: 我想要的是 我四处寻找与排序数字集相关的算法,但是我发现所有算法都涉及对字母数字集进行排序。 我知道这可能是个没有脑子的问题,但是google和我的教科书没有提供比该.sort()功能有用的功能。 问题答案: 您实际上尚未将字符串转换为

  • 问题内容: 有没有一种简单的方法可以在Python中按字母顺序对字符串中的字母进行排序? 因此对于: 我想返回: 问题答案: 你可以做:

  • 问题内容: 我正在尝试对包含数字的字符串列表进行排序 但是列表是排序而不是列表 问题答案: 您要基于值(而不是字符串值)进行排序,因此请尝试:

  • 问题内容: 我想对具有nr的字符串进行排序。我怎么做? 可以说我的整数是 在主要我做class2.Sort(); 提前致谢。 问题答案:

  • 问题内容: 我有一个包含国家/地区名称的对象。如何按字母顺序对列表进行排序? 问题答案: 假设这些是字符串,请使用方便的静态方法sort……