Find all combinations of 4 elements whose sum equals a target in Python











up vote
0
down vote

favorite












I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target




Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.




If there is better way for me to do it? it seems like the performace for the following code is too bad.



def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
if len(nums) <= 3:return
res, col = ,
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target and check not in col:
res.append(list(i))
col.append(check)
return res









share|improve this question




























    up vote
    0
    down vote

    favorite












    I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target




    Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.




    If there is better way for me to do it? it seems like the performace for the following code is too bad.



    def fourSum(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[List[int]]
    """
    from itertools import combinations
    if len(nums) <= 3:return
    res, col = ,
    for i in combinations(nums, 4):
    check = set(i)
    if sum(i) == target and check not in col:
    res.append(list(i))
    col.append(check)
    return res









    share|improve this question


























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target




      Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.




      If there is better way for me to do it? it seems like the performace for the following code is too bad.



      def fourSum(self, nums, target):
      """
      :type nums: List[int]
      :type target: int
      :rtype: List[List[int]]
      """
      from itertools import combinations
      if len(nums) <= 3:return
      res, col = ,
      for i in combinations(nums, 4):
      check = set(i)
      if sum(i) == target and check not in col:
      res.append(list(i))
      col.append(check)
      return res









      share|improve this question















      I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target




      Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.




      If there is better way for me to do it? it seems like the performace for the following code is too bad.



      def fourSum(self, nums, target):
      """
      :type nums: List[int]
      :type target: int
      :rtype: List[List[int]]
      """
      from itertools import combinations
      if len(nums) <= 3:return
      res, col = ,
      for i in combinations(nums, 4):
      check = set(i)
      if sum(i) == target and check not in col:
      res.append(list(i))
      col.append(check)
      return res






      python python-3.x programming-challenge k-sum






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 49 mins ago









      200_success

      128k15149412




      128k15149412










      asked 1 hour ago









      A.Lee

      261




      261






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.



          When using sets, most of the complexity comes from the combinations function.



          Here are the results of a time test on your code



          res1 = Solution().fourSum(range(-25,25),0)
          print(time.time() - start)
          # 0.3020472526550293


          The results of a method using only sets



          res = Solution().fourSum(range(-25,25),0)
          print(time.time() - start)
          # 0.1206510066986084


          Code for the second function



          class Solution:
          def fourSum(self, nums, target):
          """
          :type nums: List[int]
          :type target: int
          :rtype: List[List[int]]
          """
          from itertools import combinations
          res = set()
          for i in combinations(nums, 4):
          check = set(i)
          if sum(i) == target:
          res.add(i)
          return list([list(x) for x in res])




          share








          New contributor




          Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.


















            Your Answer





            StackExchange.ifUsing("editor", function () {
            return StackExchange.using("mathjaxEditing", function () {
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            });
            });
            }, "mathjax-editing");

            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: "196"
            };
            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',
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            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%2fcodereview.stackexchange.com%2fquestions%2f209410%2ffind-all-combinations-of-4-elements-whose-sum-equals-a-target-in-python%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.



            When using sets, most of the complexity comes from the combinations function.



            Here are the results of a time test on your code



            res1 = Solution().fourSum(range(-25,25),0)
            print(time.time() - start)
            # 0.3020472526550293


            The results of a method using only sets



            res = Solution().fourSum(range(-25,25),0)
            print(time.time() - start)
            # 0.1206510066986084


            Code for the second function



            class Solution:
            def fourSum(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[List[int]]
            """
            from itertools import combinations
            res = set()
            for i in combinations(nums, 4):
            check = set(i)
            if sum(i) == target:
            res.add(i)
            return list([list(x) for x in res])




            share








            New contributor




            Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.






















              up vote
              0
              down vote













              Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.



              When using sets, most of the complexity comes from the combinations function.



              Here are the results of a time test on your code



              res1 = Solution().fourSum(range(-25,25),0)
              print(time.time() - start)
              # 0.3020472526550293


              The results of a method using only sets



              res = Solution().fourSum(range(-25,25),0)
              print(time.time() - start)
              # 0.1206510066986084


              Code for the second function



              class Solution:
              def fourSum(self, nums, target):
              """
              :type nums: List[int]
              :type target: int
              :rtype: List[List[int]]
              """
              from itertools import combinations
              res = set()
              for i in combinations(nums, 4):
              check = set(i)
              if sum(i) == target:
              res.add(i)
              return list([list(x) for x in res])




              share








              New contributor




              Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.




















                up vote
                0
                down vote










                up vote
                0
                down vote









                Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.



                When using sets, most of the complexity comes from the combinations function.



                Here are the results of a time test on your code



                res1 = Solution().fourSum(range(-25,25),0)
                print(time.time() - start)
                # 0.3020472526550293


                The results of a method using only sets



                res = Solution().fourSum(range(-25,25),0)
                print(time.time() - start)
                # 0.1206510066986084


                Code for the second function



                class Solution:
                def fourSum(self, nums, target):
                """
                :type nums: List[int]
                :type target: int
                :rtype: List[List[int]]
                """
                from itertools import combinations
                res = set()
                for i in combinations(nums, 4):
                check = set(i)
                if sum(i) == target:
                res.add(i)
                return list([list(x) for x in res])




                share








                New contributor




                Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.



                When using sets, most of the complexity comes from the combinations function.



                Here are the results of a time test on your code



                res1 = Solution().fourSum(range(-25,25),0)
                print(time.time() - start)
                # 0.3020472526550293


                The results of a method using only sets



                res = Solution().fourSum(range(-25,25),0)
                print(time.time() - start)
                # 0.1206510066986084


                Code for the second function



                class Solution:
                def fourSum(self, nums, target):
                """
                :type nums: List[int]
                :type target: int
                :rtype: List[List[int]]
                """
                from itertools import combinations
                res = set()
                for i in combinations(nums, 4):
                check = set(i)
                if sum(i) == target:
                res.add(i)
                return list([list(x) for x in res])





                share








                New contributor




                Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.








                share


                share






                New contributor




                Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                answered 2 mins ago









                Noah B. Johnson

                11




                11




                New contributor




                Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.





                New contributor





                Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






                Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Code Review Stack Exchange!


                    • 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.


                    Use MathJax to format equations. MathJax reference.


                    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.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209410%2ffind-all-combinations-of-4-elements-whose-sum-equals-a-target-in-python%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

                    404 Error Contact Form 7 ajax form submitting

                    How to know if a Active Directory user can login interactively

                    Refactoring coordinates for Minecraft Pi buildings written in Python