Может кто-нибудь объяснить, как выполняется сортировка в этой строке. Я вижу, что сортировка выполняется с помощью функции лямбда

#python #python-3.x #copy

Вопрос:

Это связано с одной из проблем с кодом. Я не понимал, почему и как используется функция разделения

  class Solution(object):
    def reorderLogFiles(self, logs):
        """
        :type logs: List[str]
        :rtype: List[str]
        """
        
        letters= []
        digits = []
        
        for log in logs:
            split = log.split(" ")
            
            if split[1].isdigit():
                digits.append(log)
            else:
                letters.append(log)

        # Didn't get this line of code
        letters.sort(key=lambda x: (x.split(' ')[1:],x.split(' ')[0])) 
        
        return letters digits
 

Комментарии:

1. Я бы не стал использовать для этого лямбда-выражение. Определите регулярную функцию, которая вызывает x.split один раз, а затем возвращает «повернутый» список. Вероятно, вы могли бы использовать выражение назначения в лямбда-выражении.

2. def foo(x): y = x.split(' '); return (y[1:], y[0]) — тогда letter.sort(key=foo) .

Ответ №1:

lambda это просто способ создать функцию на месте. Если вы хотите поиграть с этой конкретной функцией, чтобы почувствовать, что она делает, просто назначьте ей имя и скормите ей несколько строк.

 >>> sort_key = lambda x: (x.split(' ')[1:],x.split(' ')[0])
>>> sort_key("foo bar")
(['bar'], 'foo')
>>> sort_key("the quick brown fox")
(['quick', 'brown', 'fox'], 'the')
 

Когда функция используется в качестве key аргумента sort «кому», каждый элемент сортируемого списка передается через эту функцию, прежде чем его сравнивают с другими элементами в списке. По сути, эта ключевая функция позволяет сортировать строки в соответствии с их вторым (разделенным пробелом) словом.