Как вы извлекаете все элементы кортежа для l oop? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь решить проблему комбинаций (nCr). У меня есть следующие цифры [1,2,3,4]. Код должен создать все возможные комбинации (4C2): (1,2), (1,3), (1,4), (2,3), (2,4), (3,4). Вот код:

import itertools
from math import factorial

def calc_combin(n, r):
    return factorial(n) // factorial(r) // factorial(n-r)

lines=calc_combin(4,2) #4C2

b_list = list(range(1,5))
combinations = itertools.combinations(b_list,2)

c_list=[]

for i_c in range(0,lines):
    c_list.append([])

for c in combinations:
    c                 #tuple that has all the combinations
    c_listi = list(c) #converting tuple "c" to list "c_listi"
    print(c_listi)

Это вывод:

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

Теперь я хочу, чтобы выходные значения сохранялись вне для l oop. без перезаписи предыдущих значений.

Есть ли способ извлечь все элементы кортежа (c) вне for-l oop? Если нет, то как вы извлекаете его из списка переменных (c_listi) вне for-l oop?

1 Ответ

0 голосов
/ 21 февраля 2020

Если вы присваиваете переменную itertools.combinations в виде списка, вы можете использовать ее столько раз, сколько захотите:

cs = list(itertools.combinations(b_list,2))

Если вам нужно, чтобы содержимое было списками, а не кортежи:

cs = [list(t) for t in itertools.combinations(b_list,2)]

После любого вы можете использовать и повторно использовать cs столько раз, сколько захотите.

...