#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
«кому», каждый элемент сортируемого списка передается через эту функцию, прежде чем его сравнивают с другими элементами в списке. По сути, эта ключевая функция позволяет сортировать строки в соответствии с их вторым (разделенным пробелом) словом.