【问题标题】:Python: sorting string numbers not lexicographicallyPython:不按字典顺序对字符串数字进行排序
【发布时间】:2016-06-14 05:11:24
【问题描述】:

我有一个字符串数字数组,例如:

numbers = ['10', '8', '918', '101010']

当我使用sorted(numbers) 时,我会按字典顺序对它们进行排序,例如'8' > '17'.

如何遍历按数值排序的字符串?

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用内置的sorted() 函数和int 键在比较之前将列表中的每个项目映射到一个整数:

    numbers = ['10', '8', '918', '101010']
    numbers = sorted(numbers, key=int)
    print(numbers)
    

    输出

    ['8', '10', '918', '101010']
    

    使用此方法将根据需要输出字符串列表。

    【讨论】:

    • 看起来是一个很棒且非常优雅的解决方案
    【解决方案2】:

    您可以使用内置的map 函数将数组的元素转换为整数。

    print sorted(map(int, numbers))
    

    输出:

    [8, 10, 918, 101010]
    

    【讨论】:

    • 很好,然后我可以使用str() 再次获取字符串。谢谢!
    【解决方案3】:

    如果您想保留为字符串,您可以将int 作为键传递给list.sort,它将对原始列表进行排序:

    numbers = ['10', '8', '918', '101010']
    numbers.sort(key=int)
    

    【讨论】:

      【解决方案4】:

      这是我喜欢的方式,速度非常快。

      print(sorted(sorted(numbers), key=len))
      

      【讨论】:

        【解决方案5】:

        所有元素类型都是字符串,

         >>> x=['4', '5', '29', '54', '4', '0', '-214', '542', '-64', '1', '-3', '6', '-6']
         >>> max(x)
         '6'
        

        它按字母顺序“排序”单词并返回字母列表底部的单词

        还有几个例子:

            >>> list1 = ['kyle', 'dhamu']
            >>> max(list1)
            'kyle'
        

        返回 kyle,因为 k 在 d 之后

        还请记住,从 python3.7 开始,您不能混合使用字符串和整数来使用 max 函数。下面是例子

        >>> mix_list = ['my', 'name', 'is', 1 ]
        >>> max(mix_list)
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: '>' not supported between instances of 'int' and 'str'
        
                                                                                                                       
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-21
          • 2015-03-16
          • 2014-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多