Вход:
input_list = [(1, 2), (1, 4), (1, 6)]
Ожидаемый результат:
(3, 12)
я пытался
print(reduce(lambda a, b: (a[0] + b[0], a[1] + b[1]), input_list))
а также
print(reduce(lambda (a, b), (c, d): (a + c, b + d), input_list))
оба из них не работают из-за недопустимого синтаксиса.
@miradulo Кажется, это вопрос о том, как это сделать конкретно с reduce и, в частности, с python 3, что предполагает, что это не связано с предлагаемыми дубликатами, в любом случае IMO.
Независимо от того, больше ли они заинтересованы в том, почему использование зарезервированного ключевого слова является синтаксической ошибкой или суммированием кортежей, это возникало много-много раз.
Обновленный дубликат: NameError: имя 'reduce' не определено в Python
Ошибка ничего такого в синтаксисе вашей первой попытки; какую ошибку вы видите фактически?
@miradulo Этот вопрос касается не только NameError, основанного на сокращении. Скорее, он о том, «почему этот стандартный подход« просто не работает »в Python 3, и каковы альтернативные подходы в Python 3» оба. Я не чувствую себя слишком сильно, но это очень похоже на проблему придирки вопросов, чтобы закрыть их, если мы вместо этого попытаемся сделать его дубликатом вопросов, которые либо просто об использовании сокращения, либо отдельно о проблемах NameError на основе сокращения в Python 3. Некоторые решения могут объяснить, как это сделать, вообще не требуя импорта, в то время как другие объясняют, почему существует NameError.
@ely Я действительно не понимаю, как ты так много черпаешь из этого вопроса. И ваш ответ не идет дальше ответа на дубликат.
@miradulo Как я уже сказал, я не чувствую себя очень сильно, но я действительно думаю, что то, что я говорю, показалось мне очевидный при первом чтении вопроса, даже когда переменная изначально была неправильно названа in. Учитывая, что он может мгновенно появиться таким образом для некоторых читателей, он, по крайней мере, предлагает не закрывать его, даже если многим это не нравится и они просто игнорируют вопрос. Мне кажется, что в наши дни просто уйти - это неэффективная тактика.
Пусть это будет уроком: (1) всегда запускать код перед его публикацией (2) копировать и вставлять полную фактическую трассировку.
@ely Я не понимаю твоих доводов в пользу того, что это вообще не дубликат. Если OP (или кто-либо с такой же проблемой) действительно должен был найти ошибку, которую они получали, это буквально заголовок повторяющегося вопроса. Следовательно, я не понимаю, как этот вопрос или ответ добавляют какую-либо ценность. Если только один из них не суммирует кортежи, не импортируйте functools.reduce и не выполняйте правильный поиск с их ошибкой. Но в любом случае, я думаю, согласен не согласиться.
@miradulo Думаю, я вижу разницу между «почему возникает именно это исключение» и «почему этот код, который выполняет то, что я хочу в Python 2, не дает результата в Python 3, и каковы различные возможные решения» . На последний вопрос один ответ мог бы объяснить functools.reduce, хотя вопрос, в основном, не связан с конкретным явлением простого reduce, генерирующего NameError (это всего лишь одна часть, другая - любой другой способ решить ту же проблему, изменив Код Python 2 для другой работы в Python 3).
Более того, моя (меньшинство) интерпретация многих рекомендаций Stack Overflow заключается в том, что мы должны просто попытаться помочь людям и, как правило, просто не очень беспокоиться о том, какой уровень усилий они вкладывают в вопрос. Раньше я чувствовал себя иначе, но после долгого использования сайта мне просто хочется помогать людям, даже когда они стыдно просто просят ответа. На самом деле я не думаю, что все предполагаемые недостатки простой помощи им на самом деле значимы, поэтому я обычно подхожу к вопросам с точки зрения того, что их почти никогда не следует закрывать для дублирования или усилий.






В Python 3 reduce перемещен из builtins в functools, поэтому вам понадобится from functools import reduce.
Это даст NameError, а не SyntaxError.
@chepner У нас никогда не было подтверждения, что это действительно был SyntaxError, только «сбой из-за неправильного синтаксиса», который мог быть человеческой интерпретацией различных типов ошибок.
У нас также нет никаких подтверждений того, что код не предшествует from functools import reduce.
@chepner Но связь с Python 3 дает некоторые доказательства того, что это часть проблемы, поэтому мои последующие убеждения о том, почему у этого человека возникают проблемы, будут иметь некоторую плотность в объяснениях, которые включают этот фактор.
Спасибо! Это решило проблему для первого стиля (с использованием квадратных скобок), но не решило ее для второго стиля. Однако для меня этого достаточно. Боковое примечание: мне кажется странным, как я смог использовать сокращение для списка не кортежей, не импортируя его.
Я думаю, что вопрос здесь больше связан с Зачем, иначе корректно выглядящий solutoin содержит синтаксическую ошибку, а не как выполнить попарное добавление кортежей.