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







8















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
    Apr 4 at 19:51


















8















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
    Apr 4 at 19:51














8












8








8








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 Apr 4 at 20:02









amchugh89

595621




595621










asked Apr 4 at 19:44









Arun AranganathanArun Aranganathan

525




525













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

    – Reedinationer
    Apr 4 at 19:51



















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

    – Reedinationer
    Apr 4 at 19:51

















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

– Reedinationer
Apr 4 at 19:51





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

– Reedinationer
Apr 4 at 19:51












2 Answers
2






active

oldest

votes


















10














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














    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
      Apr 4 at 19:55






    • 2





      @ritlew see edit.

      – Alex Hall
      Apr 4 at 19:59












    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









    10














    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




























      10














      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


























        10












        10








        10







        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 Apr 4 at 19:56









        chepnerchepner

        261k35251344




        261k35251344

























            8














            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
              Apr 4 at 19:55






            • 2





              @ritlew see edit.

              – Alex Hall
              Apr 4 at 19:59
















            8














            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
              Apr 4 at 19:55






            • 2





              @ritlew see edit.

              – Alex Hall
              Apr 4 at 19:59














            8












            8








            8







            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 Apr 4 at 19:58

























            answered Apr 4 at 19:52









            Alex HallAlex Hall

            23.1k32053




            23.1k32053













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

              – ritlew
              Apr 4 at 19:55






            • 2





              @ritlew see edit.

              – Alex Hall
              Apr 4 at 19:59



















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

              – ritlew
              Apr 4 at 19:55






            • 2





              @ritlew see edit.

              – Alex Hall
              Apr 4 at 19:59

















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

            – ritlew
            Apr 4 at 19:55





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

            – ritlew
            Apr 4 at 19:55




            2




            2





            @ritlew see edit.

            – Alex Hall
            Apr 4 at 19:59





            @ritlew see edit.

            – Alex Hall
            Apr 4 at 19:59


















            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

            Category:香港粉麵

            List *all* the tuples!

            Channel [V]