Как генерировать списковые комбинации?
1928 просмотра
4 ответа
Я хочу составить список списков, который представляет все возможные комбинации чисел 0 и 1. Списки имеют длину n.
Вывод должен выглядеть следующим образом. Для n = 1:
[ [0], [1] ]
Для n = 2:
[ [0,0], [0, 1], [1,0], [1, 1] ]
Для n = 3:
[ [0,0,0], [0, 0, 1], [0, 1, 1]... [1, 1, 1] ]
Я посмотрел на itertools.combinsk, но это создает кортежи, а не списки. [0,1] и [1,0] являются различными комбинациями, тогда как есть только один кортеж (0,1) (порядок не имеет значения).
Любые намеки или предложения? Я пробовал некоторые рекурсивные методы, но я не нашел решения.
Автор: Nate Reed Источник Размещён: 12.11.2019 09:29Ответы (4)
4 плюса
Ты ищешь itertools.product(...)
.
>>> from itertools import product
>>> list(product([1, 0], repeat=2))
[(1, 1), (1, 0), (0, 1), (0, 0)]
Если вы хотите преобразовать внутренние элементы в list
тип, используйте понимание списка
>>> [list(elem) for elem in product([1, 0], repeat =2)]
[[1, 1], [1, 0], [0, 1], [0, 0]]
Или с помощью map()
>>> map(list, product([1, 0], repeat=2))
[[1, 1], [1, 0], [0, 1], [0, 0]]
Автор: Sukrit Kalra
Размещён: 28.07.2013 04:33
2 плюса
Используйте itertools.product
, присваивая repeat
n.
from itertools import product
list(product([0,1], repeat=n))
Демо-версия:
>>> list(product([0,1], repeat=2))
[(0, 0), (0, 1), (1, 0), (1, 1)]
>>> list(product([0,1], repeat=3))
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
Автор: zhangyangyu
Размещён: 28.07.2013 04:34
2 плюса
>>> from itertools import product
>>> list(product([0, 1], repeat=2))
[(0, 0), (0, 1), (1, 0), (1, 1)]
>>>
>>> list(product([0, 1], repeat=3))
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
Чтобы получить список списка, вы можете сделать:
>>> map(list, list(product([0, 1], repeat=2)))
[[0, 0], [0, 1], [1, 0], [1, 1]]
Автор: Rohit Jain
Размещён: 28.07.2013 04:35
1 плюс
Просто чтобы добавить немного разнообразия, вот еще один способ достижения этого:
>>> [map(int, format(i, "03b")) for i in range(8)]
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
Автор: Sven Marnach
Размещён: 28.07.2013 05:53
Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- python Звук Питона («Колокол»)
- python Regex и unicode
- python Создать зашифрованный ZIP-файл в Python
- python Создайте базовый итератор Python
- python Функция транспонирования / распаковки (обратная сторона zip)?
- combinations Алгоритм возврата всех комбинаций k элементов из n
- combinations Как получить все возможные комбинации элементов списка?
- combinations Все комбинации списка списков
- combinations Как создать комбинации нескольких векторов без циклов жесткого кодирования в C ++?
- combinations Генерация неповторяющихся пар комбинаций в R
- combinations Генерация всех двоичных строк длины n с установленным k битами
- combinations эффективный подсчет комбинаций и перестановок
- combinations Комбинации массивов PHP
- combinations Вывод каждой комбинации массива чисел с помощью javascript
- combinations Поиск всех возможных комбинаций чисел для достижения заданной суммы