Предложения по хранению выходов вложенного 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)
кажется самый простой способ.