map – конвертировать вложенный цикл для сопоставления эквивалента

Пример :

>>>for x in iterable1: ... expression 

Форма карты:

 >>>map(lambda x:expression,iterable1) 

Как расширить это на вложенный?

Пример :

 >>>for x in itr1: ... for y in itr2: ... expr 

Без использования понятий.

Изменить: использовать только карту.

Вы можете использовать itertools.product для построения декартова продукта из ваших двух вложенных последовательностей и map свое выражение с этим списком из 2-х кортежей:

 from itertools import product map(lambda (x, y): expression, product(itr1, itr2)) 

Пример с некоторыми фактическими значениями:

 seq = map(lambda (x, y): '%s:%s' % (x, y), product(itr1, itr2)) for item in seq: print item 

Обратите внимание, что lambda (x, y) необходимо распаковать каждый 2-кортеж из последовательности в отдельные аргументы x и y используемые в выражении.

Потерпите меня на этом. Не объяснение, но это работало через 2 дня. Использование только карты и списка. Это плохой код. Предложения по сокращению кода приветствуются. Решение Python 3

Пример использования списка:

 >>> a=[x+y for x in [0,1,2] for y in [100,200,300]] >>> a [100,200,300,101,201,301,102,202,302] 

Пример использования:

 >>>a=[] >>>for x in [0,1,2]: ... for y in [100,200,300]: ... a.append(x+y) ... >>>a [100,200,300,101,201,301,102,202,302] 

Теперь пример с использованием только карты:

 >>>n=[] >>>list(map(lambda x:n.extend(map(x,[100,200,300])),map(lambda x:lambda y:x+y,[0,1,2]))) >>>n [100,200,300,101,201,301,102,202,302] 

Значительно меньшее решение python2.7:

 >>>m=[] >>>map(lambda x:m.extend(x),map(lambda x:map(x,[100,200,300]),map(lambda x:lambda y:x+y,[0,1,2]))) >>>m [100,200,300,101,201,301,102,202,302] 

Другой вариант: я отправил письмо Марку Лутцу, и это было его решением. Это не использует замыкания и является самым близким к встроенным функциям петель.

 >>> X = [0, 1, 2] >>> Y = [100, 200, 300] >>> n = [] >>> t = list(map(lambda x: list(map(lambda y: n.append(x + y), Y)),X)) >>> n [100,200,300,101,201,301,102,202,302] 

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

Один вопрос, который вы должны задать себе, – почему вы думаете, что это был бы желательный способ написать программу Python? Язык определен явно для удобочитаемости, и вы должны делать все возможное, чтобы поддерживать эту читаемость.

Thrks lapin!

У меня такая же проблема, и вы даете мне решение:

Долгий путь:

 SUITE = 'Heart Diamonds Spades Clubs'.split() RANKS = '2 3 4 5 6 7 8 9 10 JQK A'.split() for x in RANKS: for y in SUITE: deck.append(x+" " +y) print(deck) print(len(deck)) 

Короткий путь и РЕШЕНИЕ :

 deck = [x +" " + y for x in RANKS for y in SUITE]