Python: использование map () без лямбд в многомерном массиве / списке - PullRequest
3 голосов
/ 05 марта 2012

У меня есть некоторый код на python, который поразрядно или равен b всем значениям в многомерном списке, называемом

for i in xrange(len(a)):
    for j in xrange(len(a[i])):
        a[i][j] |= b

У меня вопрос, есть ли способ написать этот код, используя только (map (), filter (), redu ()) без необходимости использовать лямбда-выражения или любые другие определения функций, как в примере ниже

map(lambda x: map(lambda y: y | b, x), a)

Ответы [ 3 ]

4 голосов
/ 05 марта 2012

Я не вижу абсолютно никаких причин, по которым следует избегать лямбда-выражений или составления списков, но здесь говорится:

import operator,functools
a = map(functools.partial(map, functools.partial(operator.or_, b)), a)
4 голосов
/ 05 марта 2012

map, filter и reduce все принимают функции (или, по крайней мере, вызываемые - то есть что-нибудь с __call__ методом) в качестве аргументов.Так что в принципе нет.Вы должны определить функцию или класс.

0 голосов
/ 05 марта 2012

К сожалению, в Python нет синтаксиса краткого каррирования, поэтому вы не можете сделать что-то вроде map(b |, x).

Я бы просто использовал списочные выражения:

[y | b for x in a for y in x]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...