Combinations of multiple lists





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







7















Suppose I have three lists:



list1 --> [a, b, c, d, e, f, g, h]
list2 --> [i, j, k]
list3 --> [l, m, n, o, p]


I wish to generate all combinations where I take five elements from list1, two elements from list2 and three elements from list3.



eg.



a, b, c, d, e, i, j, l, m, n  
a, b, c, d, e, i, j, l, m, o
etc.


I tried to use itertools.combinations.



l1_combinations = itertools.combinations(list1, 5)
l2_combinations = itertools.combinations(list2, 2)
l3_combinations = itertools.combinations(list3, 3)
for l1_iterator in list(l1_combinations):
for l2_iterator in list(l2_combinations): #added a missing )
for l3_iterator in list(l3_combinations):
sample = l1_iterator + l2_iterator + l3_iterator
print(sample)


But I am getting output with iterations happening only on list3. In all the output, only first five elements from list1 and first two elements from list2 are present. Combinations with other elements from those two lists aren't present.



Can someone help me here and also explain what exactly did i miss ?










share|improve this question

























  • Well I'm sure the missing ) in for l2_iterator in list(l2_combinations: doesn't help...

    – Reedinationer
    6 hours ago


















7















Suppose I have three lists:



list1 --> [a, b, c, d, e, f, g, h]
list2 --> [i, j, k]
list3 --> [l, m, n, o, p]


I wish to generate all combinations where I take five elements from list1, two elements from list2 and three elements from list3.



eg.



a, b, c, d, e, i, j, l, m, n  
a, b, c, d, e, i, j, l, m, o
etc.


I tried to use itertools.combinations.



l1_combinations = itertools.combinations(list1, 5)
l2_combinations = itertools.combinations(list2, 2)
l3_combinations = itertools.combinations(list3, 3)
for l1_iterator in list(l1_combinations):
for l2_iterator in list(l2_combinations): #added a missing )
for l3_iterator in list(l3_combinations):
sample = l1_iterator + l2_iterator + l3_iterator
print(sample)


But I am getting output with iterations happening only on list3. In all the output, only first five elements from list1 and first two elements from list2 are present. Combinations with other elements from those two lists aren't present.



Can someone help me here and also explain what exactly did i miss ?










share|improve this question

























  • Well I'm sure the missing ) in for l2_iterator in list(l2_combinations: doesn't help...

    – Reedinationer
    6 hours ago














7












7








7








Suppose I have three lists:



list1 --> [a, b, c, d, e, f, g, h]
list2 --> [i, j, k]
list3 --> [l, m, n, o, p]


I wish to generate all combinations where I take five elements from list1, two elements from list2 and three elements from list3.



eg.



a, b, c, d, e, i, j, l, m, n  
a, b, c, d, e, i, j, l, m, o
etc.


I tried to use itertools.combinations.



l1_combinations = itertools.combinations(list1, 5)
l2_combinations = itertools.combinations(list2, 2)
l3_combinations = itertools.combinations(list3, 3)
for l1_iterator in list(l1_combinations):
for l2_iterator in list(l2_combinations): #added a missing )
for l3_iterator in list(l3_combinations):
sample = l1_iterator + l2_iterator + l3_iterator
print(sample)


But I am getting output with iterations happening only on list3. In all the output, only first five elements from list1 and first two elements from list2 are present. Combinations with other elements from those two lists aren't present.



Can someone help me here and also explain what exactly did i miss ?










share|improve this question
















Suppose I have three lists:



list1 --> [a, b, c, d, e, f, g, h]
list2 --> [i, j, k]
list3 --> [l, m, n, o, p]


I wish to generate all combinations where I take five elements from list1, two elements from list2 and three elements from list3.



eg.



a, b, c, d, e, i, j, l, m, n  
a, b, c, d, e, i, j, l, m, o
etc.


I tried to use itertools.combinations.



l1_combinations = itertools.combinations(list1, 5)
l2_combinations = itertools.combinations(list2, 2)
l3_combinations = itertools.combinations(list3, 3)
for l1_iterator in list(l1_combinations):
for l2_iterator in list(l2_combinations): #added a missing )
for l3_iterator in list(l3_combinations):
sample = l1_iterator + l2_iterator + l3_iterator
print(sample)


But I am getting output with iterations happening only on list3. In all the output, only first five elements from list1 and first two elements from list2 are present. Combinations with other elements from those two lists aren't present.



Can someone help me here and also explain what exactly did i miss ?







python






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 6 hours ago









amchugh89

595621




595621










asked 6 hours ago









Arun AranganathanArun Aranganathan

475




475













  • Well I'm sure the missing ) in for l2_iterator in list(l2_combinations: doesn't help...

    – Reedinationer
    6 hours ago



















  • Well I'm sure the missing ) in for l2_iterator in list(l2_combinations: doesn't help...

    – Reedinationer
    6 hours ago

















Well I'm sure the missing ) in for l2_iterator in list(l2_combinations: doesn't help...

– Reedinationer
6 hours ago





Well I'm sure the missing ) in for l2_iterator in list(l2_combinations: doesn't help...

– Reedinationer
6 hours ago












2 Answers
2






active

oldest

votes


















8














As an alternative to regenerating the list of combinations, compute the product of the combinations up front; this also saves you from nesting for loops.



from itertools import combinations, product


list1 = list("abcdefgh")
list2 = list("ijk")
list3 = list("lmnop")

l1 = combinations(list1, 5)
l2 = combinations(list2, 2)
l3 = combinations(list3, 3)
for c1, c2, c3 in product(l1, l2, l3):
sample = c1 + c2 + c3
print(sample)





share|improve this answer































    6














    Don't iterate over the same iterator multiple times, after the first time it's exhausted. Iterate over a fresh iterator each time:



    for l1_iterator in itertools.combinations(list1, 5):
    for l2_iterator in itertools.combinations(list2, 2):
    for l3_iterator in itertools.combinations(list3, 3):
    sample = l1_iterator + l2_iterator + l3_iterator
    print(sample)


    Or make lists of each one in advance to avoid recomputation:



    l1_combinations = list(itertools.combinations(list1, 5))
    l2_combinations = list(itertools.combinations(list2, 2))
    l3_combinations = list(itertools.combinations(list3, 3))
    for l1_iterator in l1_combinations:
    for l2_iterator in l2_combinations:
    for l3_iterator in l3_combinations:
    sample = l1_iterator + l2_iterator + l3_iterator
    print(sample)





    share|improve this answer


























    • What would be a solution to not regenerate the combinations every time?

      – ritlew
      6 hours ago






    • 2





      @ritlew see edit.

      – Alex Hall
      6 hours ago












    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
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55523811%2fcombinations-of-multiple-lists%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









    8














    As an alternative to regenerating the list of combinations, compute the product of the combinations up front; this also saves you from nesting for loops.



    from itertools import combinations, product


    list1 = list("abcdefgh")
    list2 = list("ijk")
    list3 = list("lmnop")

    l1 = combinations(list1, 5)
    l2 = combinations(list2, 2)
    l3 = combinations(list3, 3)
    for c1, c2, c3 in product(l1, l2, l3):
    sample = c1 + c2 + c3
    print(sample)





    share|improve this answer




























      8














      As an alternative to regenerating the list of combinations, compute the product of the combinations up front; this also saves you from nesting for loops.



      from itertools import combinations, product


      list1 = list("abcdefgh")
      list2 = list("ijk")
      list3 = list("lmnop")

      l1 = combinations(list1, 5)
      l2 = combinations(list2, 2)
      l3 = combinations(list3, 3)
      for c1, c2, c3 in product(l1, l2, l3):
      sample = c1 + c2 + c3
      print(sample)





      share|improve this answer


























        8












        8








        8







        As an alternative to regenerating the list of combinations, compute the product of the combinations up front; this also saves you from nesting for loops.



        from itertools import combinations, product


        list1 = list("abcdefgh")
        list2 = list("ijk")
        list3 = list("lmnop")

        l1 = combinations(list1, 5)
        l2 = combinations(list2, 2)
        l3 = combinations(list3, 3)
        for c1, c2, c3 in product(l1, l2, l3):
        sample = c1 + c2 + c3
        print(sample)





        share|improve this answer













        As an alternative to regenerating the list of combinations, compute the product of the combinations up front; this also saves you from nesting for loops.



        from itertools import combinations, product


        list1 = list("abcdefgh")
        list2 = list("ijk")
        list3 = list("lmnop")

        l1 = combinations(list1, 5)
        l2 = combinations(list2, 2)
        l3 = combinations(list3, 3)
        for c1, c2, c3 in product(l1, l2, l3):
        sample = c1 + c2 + c3
        print(sample)






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 6 hours ago









        chepnerchepner

        261k35250343




        261k35250343

























            6














            Don't iterate over the same iterator multiple times, after the first time it's exhausted. Iterate over a fresh iterator each time:



            for l1_iterator in itertools.combinations(list1, 5):
            for l2_iterator in itertools.combinations(list2, 2):
            for l3_iterator in itertools.combinations(list3, 3):
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)


            Or make lists of each one in advance to avoid recomputation:



            l1_combinations = list(itertools.combinations(list1, 5))
            l2_combinations = list(itertools.combinations(list2, 2))
            l3_combinations = list(itertools.combinations(list3, 3))
            for l1_iterator in l1_combinations:
            for l2_iterator in l2_combinations:
            for l3_iterator in l3_combinations:
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)





            share|improve this answer


























            • What would be a solution to not regenerate the combinations every time?

              – ritlew
              6 hours ago






            • 2





              @ritlew see edit.

              – Alex Hall
              6 hours ago
















            6














            Don't iterate over the same iterator multiple times, after the first time it's exhausted. Iterate over a fresh iterator each time:



            for l1_iterator in itertools.combinations(list1, 5):
            for l2_iterator in itertools.combinations(list2, 2):
            for l3_iterator in itertools.combinations(list3, 3):
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)


            Or make lists of each one in advance to avoid recomputation:



            l1_combinations = list(itertools.combinations(list1, 5))
            l2_combinations = list(itertools.combinations(list2, 2))
            l3_combinations = list(itertools.combinations(list3, 3))
            for l1_iterator in l1_combinations:
            for l2_iterator in l2_combinations:
            for l3_iterator in l3_combinations:
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)





            share|improve this answer


























            • What would be a solution to not regenerate the combinations every time?

              – ritlew
              6 hours ago






            • 2





              @ritlew see edit.

              – Alex Hall
              6 hours ago














            6












            6








            6







            Don't iterate over the same iterator multiple times, after the first time it's exhausted. Iterate over a fresh iterator each time:



            for l1_iterator in itertools.combinations(list1, 5):
            for l2_iterator in itertools.combinations(list2, 2):
            for l3_iterator in itertools.combinations(list3, 3):
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)


            Or make lists of each one in advance to avoid recomputation:



            l1_combinations = list(itertools.combinations(list1, 5))
            l2_combinations = list(itertools.combinations(list2, 2))
            l3_combinations = list(itertools.combinations(list3, 3))
            for l1_iterator in l1_combinations:
            for l2_iterator in l2_combinations:
            for l3_iterator in l3_combinations:
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)





            share|improve this answer















            Don't iterate over the same iterator multiple times, after the first time it's exhausted. Iterate over a fresh iterator each time:



            for l1_iterator in itertools.combinations(list1, 5):
            for l2_iterator in itertools.combinations(list2, 2):
            for l3_iterator in itertools.combinations(list3, 3):
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)


            Or make lists of each one in advance to avoid recomputation:



            l1_combinations = list(itertools.combinations(list1, 5))
            l2_combinations = list(itertools.combinations(list2, 2))
            l3_combinations = list(itertools.combinations(list3, 3))
            for l1_iterator in l1_combinations:
            for l2_iterator in l2_combinations:
            for l3_iterator in l3_combinations:
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 6 hours ago

























            answered 6 hours ago









            Alex HallAlex Hall

            23k32053




            23k32053













            • What would be a solution to not regenerate the combinations every time?

              – ritlew
              6 hours ago






            • 2





              @ritlew see edit.

              – Alex Hall
              6 hours ago



















            • What would be a solution to not regenerate the combinations every time?

              – ritlew
              6 hours ago






            • 2





              @ritlew see edit.

              – Alex Hall
              6 hours ago

















            What would be a solution to not regenerate the combinations every time?

            – ritlew
            6 hours ago





            What would be a solution to not regenerate the combinations every time?

            – ritlew
            6 hours ago




            2




            2





            @ritlew see edit.

            – Alex Hall
            6 hours ago





            @ritlew see edit.

            – Alex Hall
            6 hours ago


















            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55523811%2fcombinations-of-multiple-lists%23new-answer', 'question_page');
            }
            );

            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







            Popular posts from this blog

            What other Star Trek series did the main TNG cast show up in?

            Berlina muro

            Berlina aerponto