Как произвести все комбинации?

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

Как произвести все комбинации?

Я пробовал использовать itertools, но безуспешно. Я пытаюсь сделать так, чтобы он выдавал результат выше, когда я передаю ему аргументы 5 3 в моем терминале. Я использую python3. Объяснение было бы отличным. Вот мой код.

import sys
import itertools

def comb(A,n,k,p,lo):
    stuff = [A, n, k,p,lo]
    return itertools.combinations(stuff, len(stuff)

if __name__ == "__main__":
    d = len(sys.argv)>3
    n = int(sys.argv[1])
    k = int(sys.argv[2])
    A = []
    for i in range(k):
         A.append(0)
    if d: print("n:",n,"k:",k)
    comb(A,n,k,0,0)

Похоже, ваш отступ немного сбился, и из-за этого трудно понять, что происходит. Какой результат вы получите сейчас?

munk 02.05.2018 03:33

где вы печатаете comb(A,n,k,0,0) Почему у вас в списке для stuff 2 нуля? Почему ты не можешь просто это сделать? combinations(range(n), L) где n ваш номер

Abhishek Dujari 02.05.2018 03:34

Мое плохое, похоже, что в копии перепутали. Я поправлю.

J.Doe 02.05.2018 03:34

Что такое «число n-1»? Что такое «число длиной L?».

Paul Cornelius 02.05.2018 03:34

N-1 - вот как это звучит. Например, 5 произведет все комбинации 0-4. L - длина списка комбинаций.

J.Doe 02.05.2018 03:36

«Число n-1» звучит для меня чепухой. Я думаю, вы имеете в виду, что n - это первый аргумент командной строки вашей программы, а L - второй аргумент командной строки. Затем ваша задача - создать все комбинации целых чисел L-длины от 0 до n-1 (включительно). Это правильно?

Paul Cornelius 02.05.2018 03:45

@PaulCornelius Да

J.Doe 02.05.2018 03:47

Похоже, вы даже не удосужились прочитать itertools.combination() документация.

martineau 02.05.2018 04:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
8
125
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

print(itertools.combinations(range(int(sys.argv[1])),int(sys.argv[2])))

отредактировано: чтобы указать ввод, как указано

Это дает мне ошибку компиляции. Вот как я пытаюсь это реализовать. В нем говорится, что объект str нельзя использовать как целое число. def comb (A, n, k, p, lo): print (itertools.combinations (диапазон (sys.argv [1]), sys.argv [2]) ‌)

J.Doe 02.05.2018 03:43

Вам нужно преобразовать аргументы в целые числа - замените sys.argv[1] на int(sys.argv[1]) и аналогично для argv [2].

Paul Cornelius 02.05.2018 03:46

Да извини, что набирал трубку и поленился. @ Павел Корнелиус прав

Abhishek Dujari 02.05.2018 09:22
import sys
from itertools import combinations

if __name__ == "__main__":
    d = len(sys.argv)>3
    n = int(sys.argv[1])
    k = int(sys.argv[2])
    A = []
    for i in range(n):
        A.append(i)
    if d: 
        print("n:",n," k:",k)
    val = combinations(A, k)
    for i in val:
        print(i)

Вам не нужна вспомогательная функция, я не думаю

Ответ принят как подходящий

Это должно работать с python 3:

test.py

import sys
import itertools

def printArray(inputArray):
  print('[', str(inputArray)[1:-1], ']')

def comb(arr, r):
  output = itertools.combinations(arr, r)
  for x in output:
    printArray(x)

if __name__ == "__main__":
  arr = range(int(sys.argv[1]))
  r = int(sys.argv[2])
  comb(arr, r)

Просто используйте: python3 test.py 5 3

вывод:

[ 0, 1, 2 ]
[ 0, 1, 3 ]
[ 0, 1, 4 ]
[ 0, 2, 3 ]
[ 0, 2, 4 ]
[ 0, 3, 4 ]
[ 1, 2, 3 ]
[ 1, 2, 4 ]
[ 1, 3, 4 ]
[ 2, 3, 4 ]

@ J.Doe Поскольку результат комбинаций является итеративным, мы должны пройти его в цикле, чтобы распечатать. Кроме того, для первого аргумента мы не можем просто отправить int (sys.argv [1]), потому что itertools.combinations ожидает отправки итеративного

BenD 02.05.2018 03:56

мой последний вопрос: как бы вы распечатали это как массив вместо строк. В основном, как вы печатаете [] вместо ()?

J.Doe 02.05.2018 04:05

Я думаю, вы могли бы создать небольшую вспомогательную функцию, а затем для каждого небольшого массива распечатать определенный формат. Я поиграю с ним и обновлю

BenD 02.05.2018 04:12

@ J.Doe для python3 вы можете использовать функцию printArray, которую я добавил

BenD 02.05.2018 04:24

Спасибо. Как убрать белое пространство по бокам?

J.Doe 02.05.2018 04:27

Без проблем. Что касается белых пространств, вам, вероятно, придется кое-что попробовать. Вы можете начать с этих ресурсов: Распечатать и Аналогичный вопрос

BenD 02.05.2018 04:31

Другие вопросы по теме