Python sort list of list containing integer and string with integers inside

后端 未结 5 1310
天涯浪人
天涯浪人 2021-01-14 06:35

How i can use python to sort the list format

format=[\"12 sheet\",\"4 sheet\",\"48 sheet\",\"6 sheet\", \"busrear\", \"phonebox\",\"train\"]
<
相关标签:
5条回答
  • 2021-01-14 06:42

    The same solution can be used here

    print sorted(format_data, key=lambda x: (int(x[1].split(None, 1)[0]) if x[1][:1].isdigit() else 999, x))
    

    Note the x[1] instead of just x. x[1] means the second element in x.

    Result:

    [[2, '4 sheet', 0],
     [4, '6 sheet', 0],
     [1, '12 sheet', 0],
     [3, '48 sheet', 0],
     [5, 'Busrear', 0],
     [6, 'phonebox', 0],
     [7, 'train', 0]]
    
    0 讨论(0)
  • 2021-01-14 06:47

    You can do this:

    lst = [[1L, u'12 sheet', 0],
           [2L, u'4 sheet', 0],
           [3L, u'48 sheet', 0],
           [4L, u'6 sheet', 0],
           [5L, u'Busrear', 0],
           [6L, u'phonebox', 0],
           [7L, u'train', 0]]
    
    def sortby(x):
        try:
            return int(x[1].split(' ')[0])
        except ValueError:
            return float('inf')
    
    lst.sort(key=sortby)
    print lst
    

    Output:

    [[2L, u'4 sheet', 0], [4L, u'6 sheet', 0], [1L, u'12 sheet', 0], [3L, u'48 sheet', 0], [5L, u'Busrear', 0], [6L, u'phonebox', 0], [7L, u'train', 0]]
    

    You can always use fancier list comprehension but readability counts. Which is why you might not feel like modifying the cool solution by falsetru for this slightly changed task.

    0 讨论(0)
  • 2021-01-14 06:52
    a = [5,1,"a","A",2]
    a = list(map(int,filter(lambda x:x.isdigit(),sorted(map(str,a)))))+list(filter(lambda x:x.isalpha(),sorted(map(str,a))))
    print(a)
    
    0 讨论(0)
  • 2021-01-14 07:01

    You can trivially sort a list of strings with built-in sorted method. Even if the objects in your list are more complex, you can still use sorted. Just pass a custom key parameter to use the second item from the inner list as the key in ordering comparisons:

    result = sorted(format, key=lambda x: x[1])
    

    Finally switch to your sorting function natsorted (from natsort package) and you end up with the desired, naturally sorted, result list:

    from natsort import natsorted
    result = natsorted(format, key=lambda x: x[1])
    
    0 讨论(0)
  • 2021-01-14 07:07

    you can use sorted or list.sort

    >>> format.sort(key=lambda x: (x[1]))
    [[1L, u'12 sheet', 0], [2L, u'4 sheet', 0], [3L, u'48 sheet', 0], [4L, u'6 sheet', 0], [5L, u'Busrear', 0], [6L, u'phonebox', 0], [7L, u'train', 0]]
    
    0 讨论(0)
提交回复
热议问题