Предложения по хранению выходов вложенного forloop?

Я пытаюсь написать функцию на Python, которая дает все возможные комбинации трех входных переменных, которые могут иметь размер 1-4. Я написал вложенный цикл forloop, который, как мне кажется, дает все возможные комбинации, но я изо всех сил пытаюсь сохранить вывод в одном одномерном массиве. Я не знаю, нужно ли мне хранить его как 3D-массив и, может быть, сжимать? Вот код, который у меня есть:

import numpy as np
def test(x,y,z):
    len1 = len(x)
    len2 = len(y)
    len3 = len(z)
    lentot = len1*len2*len3
    codons = np.empty((1,lentot))
    for i in range(len1):
        for j in range(len2):
            for k in range(len3):
                codons[] = np.array([x[i],y[j],z[k]])
    return codons

В принципе, я не могу понять, что поставить в скобку на предпоследней строке, чтобы мой вывод сохранялся в виде одномерного массива. Я даже не знаю, возможно ли это. Я попытался использовать itertools.product, чтобы выполнить это за меня, но результат сохраняется как отдельный элемент, а не как массив (каждая строка является отдельным элементом). Для моего приложения важно, чтобы я мог передавать этот вывод через другую функцию, поэтому мне нужно, чтобы это был массив строк.

3 ответа

Вы можете добавить их в список, а затем преобразовать в массив в конце.

def test(x, y, z):
    codon_list = []
    for i in x:
        for j in y:
            for k in z:
                codon_list.append([i, j, k])
    codons = np.array(codon_list)

Вы можете использовать понимание списка, чтобы облегчить себе жизнь:

def test(x,y,z):
    codons = np.array([[i,j,k] for i in x for j in y for k in z])
    return codons

Использование функции комбинаций из itertools itertools.combinations([x, y, z], 3) кажется самый простой способ.

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