Автор оригинала: Ganesh Kumar Marimuthu.
Python является одним из самых мощных языков программирования. Это дает нам различные уникальные функции и функциональные возможности, которые позволяют нам писать код.
В этой статье мы решим проблему массива LeetCode в одной строке, используя один из самых интересных функций Python – Понимание списка Отказ
Что такое понимание списка?
Перед тем, как вступить в проблемы, давайте убедимся, что мы понимаем, о чем понимают понимание списка.
Давайте посмотрим, как работает понимание списка с примером.
Рассмотрим массив номеров. Наша задача состоит в том, чтобы добавить 1 к числам по нечетным индексам и добавить 2 к числу даже в неизвестных показателях.
Теперь мы увидим, как решить вышеупомянутую проблему, использующую как в виде контура, так и в списке.
Как решить проблему с контуром
def addOneAndTwo(nums, n): for i in range(n): if i % 2 == 1: nums[i] += 1 else: nums[i] += 2 return nums
Как решить это с пониманием списка
def addOneAndTwo(nums, n): return [nums[i] + 1 if i % 2 == 1 else nums[i] + 2 for i in range(n)]
Вы можете посмотреть, как решение, использующее понимание списка, упрощено от 6 строк до 1 строки. Это сила понимания списка.
Как решить проблемы с лецкодом с пониманием списка
Теперь позвольте нам решить проблемы ниже лецкода в 1 строке, используя понимание списка.
1. Перемешать массив
Вот проблема из лецкода:
Учитывая массив Nums
состоящий из 2n
Элементы в форме [х
1 , х
2 , ..., х
N , y
1 , y
2 ..., y
N ]
Отказ Верните массив в форме [х
1 , y
1 , х
2 , y
2 , ..., х
N , y
N ]
Отказ
Пример
Вход: Nums = [2,5,1,3,4,7], Выход: [2,3,5,1,7]
Объяснение: поскольку ,,, тогда ответ – это [2,3,5,4,1,7].
Решение
def shuffle(self, nums, n): return reduce(lambda a, b: a + b, [[nums[i], nums[j]] for i, j in zip(range(0, n), range(n, 2 * n))])
2. Количество хороших пар
Учитывая массив целых чисел Nums
Отказ Пара (Я, j)
называется Хорошо Если Nums [I]
== nums [j]
и Я
< J
. Вернуть количество Хорошо Пары.
Пример
Вход: Nums = [1,2,3,1,1,3] Выход: 4
Объяснение: Есть 4 хороших пар (0,3), (0,4), (3,4), (2,5) 0-индексированы.
Решение
def numIdenticalPairs(self, nums): return sum([int(i != j and nums[i] == nums[j]) for i in range(0, len(nums)) for j in range(i + 1, len(nums))])
3. Дети с наибольшим количеством конфет
Учитывая массив Конфеты
и целое число Экстразанды
, где Конфеты [я]
представляет количество конфет, которые it ребенок имеет.
Для каждого ребенка проверьте, есть ли способ распространять Экстразанды
Среди детей так, что они могут иметь величайший Количество конфет среди них. Обратите внимание, что несколько детей могут иметь величайший Количество конфет.
Пример
Вход: конфеты = [2,3,5,1,3], вывод: [TRUE, TRUE, TRUE, FALSE, TRUE]
Объяснение: Kid 1 имеет 2 конфеты, и если они получат все дополнительные конфеты (3), у них будет 5 конфет – наибольшее количество конфет среди детей.
Kid 2 имеет 3 конфеты, и если они получат как минимум 2 дополнительных конфета, тогда у них будет наибольшее количество конфет среди детей.
Kid 3 имеет 5 конфет, и это уже самое большое количество конфет среди детей.
Kid 4 имеет 1 конфеты, и даже если они получают все дополнительные конфеты, у них будет только 4 конфеты.
Kid 5 имеет 3 конфеты, и если они получат как минимум 2 дополнительных конфета, то у них будет наибольшее количество конфет среди детей.
Решение
def kidsWithCandies(self, candies, extraCandies): return [candy + extraCandies >= max(candies) for candy in candies]
4. Список длины пробега распаковка
Нам дано список Nums
целых чисел, представляющих список сжатого с кодировкой длины пробега.
Рассмотрим каждую соседнюю пару элементов [Freq, Val] = [Nums [2 * I], Nums [2 * I + 1]]
(с я
). Для каждой такой пары есть Freq
Элементы со значением валь
объединены в сублиста. Согласите все сублисты слева направо, чтобы генерировать распаркованный список.
Верните распакованный список.
Пример
Вход: Nums = [1,2,3,4] Выход: [2,4,4,4]
Объяснение: Первая пара [1,2] означает, что мы имеем и поэтому мы создаем массив [2].
Вторая пара [3,4] означает, что мы имеем и поэтому мы генерируем [4,4,4]. В конце конкатенация [2] + [4,4,4] представляет собой [2,4,4,4].
Решение
def decompressRLElist(self, nums): return reduce(lambda a, b: a + b, [[nums[i + 1]] * nums[i] for i in range(0, len(nums), 2)])
5. Самый богатый богатство клиента
Вам дают м х н
Целочисленная сетка Счета
где Счета [I] [J]
это сумма денег Я
TH Клиент имеет в
J
TH Банк. Возвращение богатство что самый богатый клиент имеет.
Клиент богатство это сумма денег, которую они имеют во всех их банковских счетах. Самый богатый клиент является клиентом, который имеет максимум богатство Отказ
Пример
Вход: учетные записи = [[1,2,3], [3,2,1]] Выход: 6
Объяснение: 1-й клиент имеет + 2 + 2-й клиент + 2 +
Оба клиента считаются самыми богатыми богатством 6 каждый, поэтому возврат 6.
Решение
def maximumWealth(self, accounts): return max([sum(row) for row in accounts])
Заключение
Я надеюсь, что вышеуказанные решения были полезны. Вы можете комбинировать Понимание списка с другими функциями, такими как Карта, фильтр и уменьшите сделать решения более простыми и эффективными.