Python: sorting string numbers not lexicographically

前端 未结 5 1030
猫巷女王i
猫巷女王i 2020-11-29 14:13

I have an array of string-numbers, like:

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

When I use sorted(numbers), I get them

相关标签:
5条回答
  • 2020-11-29 14:39

    You can transform the elements of the array to integers by using the built-in map function.

    print sorted(map(int, numbers))
    

    Output:

    [8, 10, 918, 101010]
    
    0 讨论(0)
  • 2020-11-29 14:39

    all elements types are string,

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

    It "orders" the words alphabetically and returns the one that is at the bottom of the alphabetic list

    Few more examples:

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

    returns kyle because k is after d

    Also remember from python3.7 you cannot mix strings and integers to use max function. Below is the example

    >>> 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'
    
                                                                                                                   
    
    0 讨论(0)
  • 2020-11-29 14:42

    If you want to keep as strings you can pass int as the key to list.sort which will sort the original list:

    numbers = ['10', '8', '918', '101010']
    numbers.sort(key=int)
    
    0 讨论(0)
  • 2020-11-29 14:45

    Here is how I like to do it, which is very fast.

    print(sorted(sorted(numbers), key=len))
    
    0 讨论(0)
  • 2020-11-29 14:55

    You can use the built-in sorted() function with a key int to map each item in your list to an integer prior to comparison:

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

    Output

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

    Using this method will output a list of strings as desired.

    0 讨论(0)
提交回复
热议问题