map – конвертировать вложенный цикл для сопоставления эквивалента
Пример :
>>>for x in iterable1: ... expression
Форма карты:
>>>map(lambda x:expression,iterable1)
Как расширить это на вложенный?
Пример :
>>>for x in itr1: ... for y in itr2: ... expr
Без использования понятий.
Изменить: использовать только карту.
- Python 3.x: Как отсортировать список кортежей с одним и тем же вторым элементом (счет) по строковому значению?
- суммирование смежных подсетей с помощью python netaddr cidr_merge
- Python MySql Выберите единую колонку, возвращающую странные ценности
- Запрос XPath в XML с использованием Python
- Должен ли я засевать генератор случайных чисел?
Вы можете использовать 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]
- sympy.geometry Класс Point работает медленно
- Поиск исходных положений слов в предложении, когда слово происходит более одного раза
- Использование «Counter» в Python 3.2
- Не удается запустить Python из строки cmd
- Пример str.isdecimal () и str.isdigit ()
- распечатать (вставить в таблицу (…)), чтобы довольно печатать панды multiIndex?
- Как предварительно обрабатывать исходные файлы при запуске Sphinx?
- Учет списка вложенных списков
- Выполнение общего количества последовательных одинаковых значений
- Почему существует разница в результатах для числовой строки (float) и экземпляра float в модуле дробей?
- Как узнать, из какого класса модуля python был импортирован?