Create lists with 3 levels, containing every combination of sub list(s) values
I am currently stuck with the following problem (I could not find solution already on here that really fitted this):
I have three lists a = [a, b, c]
, b = [1, 2, 3]
and c = [0.1, 0.2, 0.3]
.
I would like to create a lists of list of lists (maybe I should be using numpy arrays?), that contains all combinations between these lists, but where each element in each sub list are also iterated in a bruce-force like pattern, such that the following is generated:
mylist = [[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.1]],
[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.2]],
...
[[a, 2, 0.3], [b, 3, 0.3], [c, 1, 0.1]],
...
[[a, 1, 0.3], [b, 1, 0.3], [c, 1, 0.3]],
...
[[a, 3, 0.3], [b, 1, 0.3], [c, 3, 0.1]]
...
[[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]]]
I appreciate that this would equate to an extremely large list (happy to be advised on a better approach!), but I effectively need to have a three dimensional list with each sublist e.g. mylist[0], passed as list containing individual sublist parameters (e.g., [[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]] to an algorithm which will use them as input. This 3-D list forms effectively the entire parameter space that will need to be "searched". Thus you can see why the following combination examples:
[[a, 1, 0.3], [b, 2, 0.3], [c, 2, 0.3]],
[[a, 3, 0.1], [b, 1, 0.3], [c, 2, 0.1]]
Are important, because they serve as a unique of parameters for algorithmic input.
Really grateful for any guidance on this, thanks.
python-3.x python-2.7 list numpy itertools
|
show 1 more comment
I am currently stuck with the following problem (I could not find solution already on here that really fitted this):
I have three lists a = [a, b, c]
, b = [1, 2, 3]
and c = [0.1, 0.2, 0.3]
.
I would like to create a lists of list of lists (maybe I should be using numpy arrays?), that contains all combinations between these lists, but where each element in each sub list are also iterated in a bruce-force like pattern, such that the following is generated:
mylist = [[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.1]],
[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.2]],
...
[[a, 2, 0.3], [b, 3, 0.3], [c, 1, 0.1]],
...
[[a, 1, 0.3], [b, 1, 0.3], [c, 1, 0.3]],
...
[[a, 3, 0.3], [b, 1, 0.3], [c, 3, 0.1]]
...
[[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]]]
I appreciate that this would equate to an extremely large list (happy to be advised on a better approach!), but I effectively need to have a three dimensional list with each sublist e.g. mylist[0], passed as list containing individual sublist parameters (e.g., [[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]] to an algorithm which will use them as input. This 3-D list forms effectively the entire parameter space that will need to be "searched". Thus you can see why the following combination examples:
[[a, 1, 0.3], [b, 2, 0.3], [c, 2, 0.3]],
[[a, 3, 0.1], [b, 1, 0.3], [c, 2, 0.1]]
Are important, because they serve as a unique of parameters for algorithmic input.
Really grateful for any guidance on this, thanks.
python-3.x python-2.7 list numpy itertools
1
Welcome to StackOverflow! So, what have you tried?
– Andreas
Nov 23 at 1:33
what is the output dimension?
– kevinkayaks
Nov 23 at 1:45
@kevinkayaks, the output dimensions are as follows:
– Ryan
Nov 23 at 9:43
` x = [[[a],[0],[0.1]],[[a],[0],[0.1]],[[a],[0],[0.1]]], y = all combinations of above`. Does that make sense? So 3 dimensions, where y equals all the combinations for a row as described above.
– Ryan
Nov 23 at 9:49
@Andreas I had try to have recursive loops for each list, then using iterools with permutations, but could not get the right output as per above.
– Ryan
Nov 23 at 10:11
|
show 1 more comment
I am currently stuck with the following problem (I could not find solution already on here that really fitted this):
I have three lists a = [a, b, c]
, b = [1, 2, 3]
and c = [0.1, 0.2, 0.3]
.
I would like to create a lists of list of lists (maybe I should be using numpy arrays?), that contains all combinations between these lists, but where each element in each sub list are also iterated in a bruce-force like pattern, such that the following is generated:
mylist = [[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.1]],
[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.2]],
...
[[a, 2, 0.3], [b, 3, 0.3], [c, 1, 0.1]],
...
[[a, 1, 0.3], [b, 1, 0.3], [c, 1, 0.3]],
...
[[a, 3, 0.3], [b, 1, 0.3], [c, 3, 0.1]]
...
[[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]]]
I appreciate that this would equate to an extremely large list (happy to be advised on a better approach!), but I effectively need to have a three dimensional list with each sublist e.g. mylist[0], passed as list containing individual sublist parameters (e.g., [[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]] to an algorithm which will use them as input. This 3-D list forms effectively the entire parameter space that will need to be "searched". Thus you can see why the following combination examples:
[[a, 1, 0.3], [b, 2, 0.3], [c, 2, 0.3]],
[[a, 3, 0.1], [b, 1, 0.3], [c, 2, 0.1]]
Are important, because they serve as a unique of parameters for algorithmic input.
Really grateful for any guidance on this, thanks.
python-3.x python-2.7 list numpy itertools
I am currently stuck with the following problem (I could not find solution already on here that really fitted this):
I have three lists a = [a, b, c]
, b = [1, 2, 3]
and c = [0.1, 0.2, 0.3]
.
I would like to create a lists of list of lists (maybe I should be using numpy arrays?), that contains all combinations between these lists, but where each element in each sub list are also iterated in a bruce-force like pattern, such that the following is generated:
mylist = [[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.1]],
[[a, 1, 0.1], [b, 1, 0.1], [c, 1, 0.2]],
...
[[a, 2, 0.3], [b, 3, 0.3], [c, 1, 0.1]],
...
[[a, 1, 0.3], [b, 1, 0.3], [c, 1, 0.3]],
...
[[a, 3, 0.3], [b, 1, 0.3], [c, 3, 0.1]]
...
[[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]]]
I appreciate that this would equate to an extremely large list (happy to be advised on a better approach!), but I effectively need to have a three dimensional list with each sublist e.g. mylist[0], passed as list containing individual sublist parameters (e.g., [[a, 3, 0.3], [b, 3, 0.3], [c, 3, 0.3]] to an algorithm which will use them as input. This 3-D list forms effectively the entire parameter space that will need to be "searched". Thus you can see why the following combination examples:
[[a, 1, 0.3], [b, 2, 0.3], [c, 2, 0.3]],
[[a, 3, 0.1], [b, 1, 0.3], [c, 2, 0.1]]
Are important, because they serve as a unique of parameters for algorithmic input.
Really grateful for any guidance on this, thanks.
python-3.x python-2.7 list numpy itertools
python-3.x python-2.7 list numpy itertools
edited Nov 23 at 6:54
enamoria
606521
606521
asked Nov 23 at 1:23
Ryan
63
63
1
Welcome to StackOverflow! So, what have you tried?
– Andreas
Nov 23 at 1:33
what is the output dimension?
– kevinkayaks
Nov 23 at 1:45
@kevinkayaks, the output dimensions are as follows:
– Ryan
Nov 23 at 9:43
` x = [[[a],[0],[0.1]],[[a],[0],[0.1]],[[a],[0],[0.1]]], y = all combinations of above`. Does that make sense? So 3 dimensions, where y equals all the combinations for a row as described above.
– Ryan
Nov 23 at 9:49
@Andreas I had try to have recursive loops for each list, then using iterools with permutations, but could not get the right output as per above.
– Ryan
Nov 23 at 10:11
|
show 1 more comment
1
Welcome to StackOverflow! So, what have you tried?
– Andreas
Nov 23 at 1:33
what is the output dimension?
– kevinkayaks
Nov 23 at 1:45
@kevinkayaks, the output dimensions are as follows:
– Ryan
Nov 23 at 9:43
` x = [[[a],[0],[0.1]],[[a],[0],[0.1]],[[a],[0],[0.1]]], y = all combinations of above`. Does that make sense? So 3 dimensions, where y equals all the combinations for a row as described above.
– Ryan
Nov 23 at 9:49
@Andreas I had try to have recursive loops for each list, then using iterools with permutations, but could not get the right output as per above.
– Ryan
Nov 23 at 10:11
1
1
Welcome to StackOverflow! So, what have you tried?
– Andreas
Nov 23 at 1:33
Welcome to StackOverflow! So, what have you tried?
– Andreas
Nov 23 at 1:33
what is the output dimension?
– kevinkayaks
Nov 23 at 1:45
what is the output dimension?
– kevinkayaks
Nov 23 at 1:45
@kevinkayaks, the output dimensions are as follows:
– Ryan
Nov 23 at 9:43
@kevinkayaks, the output dimensions are as follows:
– Ryan
Nov 23 at 9:43
` x = [[[a],[0],[0.1]],[[a],[0],[0.1]],[[a],[0],[0.1]]], y = all combinations of above`. Does that make sense? So 3 dimensions, where y equals all the combinations for a row as described above.
– Ryan
Nov 23 at 9:49
` x = [[[a],[0],[0.1]],[[a],[0],[0.1]],[[a],[0],[0.1]]], y = all combinations of above`. Does that make sense? So 3 dimensions, where y equals all the combinations for a row as described above.
– Ryan
Nov 23 at 9:49
@Andreas I had try to have recursive loops for each list, then using iterools with permutations, but could not get the right output as per above.
– Ryan
Nov 23 at 10:11
@Andreas I had try to have recursive loops for each list, then using iterools with permutations, but could not get the right output as per above.
– Ryan
Nov 23 at 10:11
|
show 1 more comment
2 Answers
2
active
oldest
votes
A generator seems a good approach, to avoid cluttering up the memory.
import itertools as it
bc=list(it.product(b,c))
#[(1, 0.1), (1, 0.2), (1, 0.3), (2, 0.1), (2, 0.2), (2, 0.3), (3, 0.1), (3, 0.2), (3, 0.3)]
res = ([[u,*v] for u,v in zip(a,bc3)] for bc3 in it.product(*[bc]*3))
you can then scan your space with :
for list_of_list in res :
#compute list_of_list
First values :
In [49]: next(res)
Out[49]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.1]]
In [50]: next(res)
Out[50]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.2]]
You can obtain an array by arr = np.array(list(res),dtype=object)
. its shape is (729,3,3).
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
add a comment |
import numpy as np
import itertools as it
a = ['a', 'b', 'c']
b = [1, 2, 3]
c = [0.1, 0.2, 0.3]
l = np.array(np.meshgrid(a,b,c)).T
l = l.reshape(l.size//3,3)
subs = [[list(x) for x in l if x[0]==val] for val in a]
list(list(x) for x in it.product(*subs))
Try this one. It generalizes to a,b,c,d,...
in an obvious way.
That said, you're going to run out of memory very quickly.
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such thatlist = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!
– Ryan
Nov 23 at 9:55
have you trieditertools.combinations
?
– kevinkayaks
Nov 23 at 9:58
Yes I trieditertools.combinations
anditertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.
– Ryan
Nov 23 at 16:46
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53439656%2fcreate-lists-with-3-levels-containing-every-combination-of-sub-lists-values%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
A generator seems a good approach, to avoid cluttering up the memory.
import itertools as it
bc=list(it.product(b,c))
#[(1, 0.1), (1, 0.2), (1, 0.3), (2, 0.1), (2, 0.2), (2, 0.3), (3, 0.1), (3, 0.2), (3, 0.3)]
res = ([[u,*v] for u,v in zip(a,bc3)] for bc3 in it.product(*[bc]*3))
you can then scan your space with :
for list_of_list in res :
#compute list_of_list
First values :
In [49]: next(res)
Out[49]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.1]]
In [50]: next(res)
Out[50]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.2]]
You can obtain an array by arr = np.array(list(res),dtype=object)
. its shape is (729,3,3).
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
add a comment |
A generator seems a good approach, to avoid cluttering up the memory.
import itertools as it
bc=list(it.product(b,c))
#[(1, 0.1), (1, 0.2), (1, 0.3), (2, 0.1), (2, 0.2), (2, 0.3), (3, 0.1), (3, 0.2), (3, 0.3)]
res = ([[u,*v] for u,v in zip(a,bc3)] for bc3 in it.product(*[bc]*3))
you can then scan your space with :
for list_of_list in res :
#compute list_of_list
First values :
In [49]: next(res)
Out[49]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.1]]
In [50]: next(res)
Out[50]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.2]]
You can obtain an array by arr = np.array(list(res),dtype=object)
. its shape is (729,3,3).
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
add a comment |
A generator seems a good approach, to avoid cluttering up the memory.
import itertools as it
bc=list(it.product(b,c))
#[(1, 0.1), (1, 0.2), (1, 0.3), (2, 0.1), (2, 0.2), (2, 0.3), (3, 0.1), (3, 0.2), (3, 0.3)]
res = ([[u,*v] for u,v in zip(a,bc3)] for bc3 in it.product(*[bc]*3))
you can then scan your space with :
for list_of_list in res :
#compute list_of_list
First values :
In [49]: next(res)
Out[49]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.1]]
In [50]: next(res)
Out[50]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.2]]
You can obtain an array by arr = np.array(list(res),dtype=object)
. its shape is (729,3,3).
A generator seems a good approach, to avoid cluttering up the memory.
import itertools as it
bc=list(it.product(b,c))
#[(1, 0.1), (1, 0.2), (1, 0.3), (2, 0.1), (2, 0.2), (2, 0.3), (3, 0.1), (3, 0.2), (3, 0.3)]
res = ([[u,*v] for u,v in zip(a,bc3)] for bc3 in it.product(*[bc]*3))
you can then scan your space with :
for list_of_list in res :
#compute list_of_list
First values :
In [49]: next(res)
Out[49]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.1]]
In [50]: next(res)
Out[50]: [['a', 1, 0.1], ['b', 1, 0.1], ['c', 1, 0.2]]
You can obtain an array by arr = np.array(list(res),dtype=object)
. its shape is (729,3,3).
edited Nov 23 at 17:20
answered Nov 23 at 17:10
B. M.
12.8k11934
12.8k11934
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
add a comment |
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@Ryan this is the best answer. Thanks B.M., I learned from this.
– kevinkayaks
Nov 23 at 23:35
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@kevinkayaks terms of stackoverflow etiquette is it acceptable to change the answer to this if it is better than a previously posted answer?
– Ryan
Nov 24 at 1:11
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@B. M. That works perfectly, and much more elegant. Thank you.
– Ryan
Nov 24 at 1:12
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
@Ryan people do this. It's not a huge deal as far as I know. Presumably it will help people who are searching for an approach in the future to select the best one.
– kevinkayaks
Nov 24 at 4:27
add a comment |
import numpy as np
import itertools as it
a = ['a', 'b', 'c']
b = [1, 2, 3]
c = [0.1, 0.2, 0.3]
l = np.array(np.meshgrid(a,b,c)).T
l = l.reshape(l.size//3,3)
subs = [[list(x) for x in l if x[0]==val] for val in a]
list(list(x) for x in it.product(*subs))
Try this one. It generalizes to a,b,c,d,...
in an obvious way.
That said, you're going to run out of memory very quickly.
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such thatlist = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!
– Ryan
Nov 23 at 9:55
have you trieditertools.combinations
?
– kevinkayaks
Nov 23 at 9:58
Yes I trieditertools.combinations
anditertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.
– Ryan
Nov 23 at 16:46
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
add a comment |
import numpy as np
import itertools as it
a = ['a', 'b', 'c']
b = [1, 2, 3]
c = [0.1, 0.2, 0.3]
l = np.array(np.meshgrid(a,b,c)).T
l = l.reshape(l.size//3,3)
subs = [[list(x) for x in l if x[0]==val] for val in a]
list(list(x) for x in it.product(*subs))
Try this one. It generalizes to a,b,c,d,...
in an obvious way.
That said, you're going to run out of memory very quickly.
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such thatlist = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!
– Ryan
Nov 23 at 9:55
have you trieditertools.combinations
?
– kevinkayaks
Nov 23 at 9:58
Yes I trieditertools.combinations
anditertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.
– Ryan
Nov 23 at 16:46
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
add a comment |
import numpy as np
import itertools as it
a = ['a', 'b', 'c']
b = [1, 2, 3]
c = [0.1, 0.2, 0.3]
l = np.array(np.meshgrid(a,b,c)).T
l = l.reshape(l.size//3,3)
subs = [[list(x) for x in l if x[0]==val] for val in a]
list(list(x) for x in it.product(*subs))
Try this one. It generalizes to a,b,c,d,...
in an obvious way.
That said, you're going to run out of memory very quickly.
import numpy as np
import itertools as it
a = ['a', 'b', 'c']
b = [1, 2, 3]
c = [0.1, 0.2, 0.3]
l = np.array(np.meshgrid(a,b,c)).T
l = l.reshape(l.size//3,3)
subs = [[list(x) for x in l if x[0]==val] for val in a]
list(list(x) for x in it.product(*subs))
Try this one. It generalizes to a,b,c,d,...
in an obvious way.
That said, you're going to run out of memory very quickly.
edited Nov 23 at 10:33
answered Nov 23 at 1:49
kevinkayaks
1,214417
1,214417
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such thatlist = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!
– Ryan
Nov 23 at 9:55
have you trieditertools.combinations
?
– kevinkayaks
Nov 23 at 9:58
Yes I trieditertools.combinations
anditertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.
– Ryan
Nov 23 at 16:46
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
add a comment |
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such thatlist = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!
– Ryan
Nov 23 at 9:55
have you trieditertools.combinations
?
– kevinkayaks
Nov 23 at 9:58
Yes I trieditertools.combinations
anditertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.
– Ryan
Nov 23 at 16:46
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:
[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such that list = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!– Ryan
Nov 23 at 9:55
I don't think this exactly what I am looking for. For example, each X ("row") dimension should consist of the following:
[[a, 1, 0.1],[b, 1, 0.1][c, 1, 0.2]]
, with all subsequent rows containing all of combinations in an iterative way for each sublist. Such that list = [[,,],[[,,]]
and each sublist iterates through every combination possible between the possible values in list b and c. In the output, each row should consist of these combinations for values a, b, c in list a. I hope I haven't been too confusing!– Ryan
Nov 23 at 9:55
have you tried
itertools.combinations
?– kevinkayaks
Nov 23 at 9:58
have you tried
itertools.combinations
?– kevinkayaks
Nov 23 at 9:58
Yes I tried
itertools.combinations
and itertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.– Ryan
Nov 23 at 16:46
Yes I tried
itertools.combinations
and itertools.permutations
, thanks for the above. Yes, memory is a problem, although for the time being I am ignoring this problem for the sake of experimentation. As @Red Cricket answered first (and I didn't ask explicitly for the most elegant solution), I have to accept his answer, but will upvote this one (it will accept my vote, but not post it visibly because of my uber newbie status). Thanks again.– Ryan
Nov 23 at 16:46
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
For context regarding the memory problem. This list is to generate an action space containing combinations of parameters for reinforcement learning. So, ideally in the case of millions of combination as a, b, c, d etc., scales the RL environment would obviously need lots of memory,.
– Ryan
Nov 23 at 17:05
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53439656%2fcreate-lists-with-3-levels-containing-every-combination-of-sub-lists-values%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Welcome to StackOverflow! So, what have you tried?
– Andreas
Nov 23 at 1:33
what is the output dimension?
– kevinkayaks
Nov 23 at 1:45
@kevinkayaks, the output dimensions are as follows:
– Ryan
Nov 23 at 9:43
` x = [[[a],[0],[0.1]],[[a],[0],[0.1]],[[a],[0],[0.1]]], y = all combinations of above`. Does that make sense? So 3 dimensions, where y equals all the combinations for a row as described above.
– Ryan
Nov 23 at 9:49
@Andreas I had try to have recursive loops for each list, then using iterools with permutations, but could not get the right output as per above.
– Ryan
Nov 23 at 10:11