/
12.02.2021 at 12:55 am
Cuttings

46 Simple Python Exercises/#10

Define a function overlapping() that takes two lists and returns True if they have at least one member in common, False otherwise.

Problem

Define a function overlapping() that takes two lists and returns True if they have at least one member in common, False otherwise.

Discussion

  1. I mainly compare Python's in-built set functions against 'standard' looping mechanisms.

  2. The results of all 3 solutions are the same. Only the implementation differs.

  3. Solution #1 uses the Set's .intersection() method, to find common elements between two lists.

  4. Solution #2 loops against two lists, and maintains another list of common elements to check against.

  5. Solution #3 loops against one list only. It breaks immediately when a common member is found. (Reason: the condition is to "have at least one member in common", and not anything more complex. ) This is possibly a performant solution, but also one likely to introduce bugs.

  6. I'd go with Solution #1 - it appears cleanest. Also, due to the use of sets, is perhaps more performant than Solution #3.

Solution

    def overlapping_1(l1, l2) -> bool:

        if set(l1).intersection(l2):
            return True
        else:
            return False


    def overlapping_2(l1, l2) -> bool:

        common = []
        for i in l1:
            for j in l2:
                if i == j:
                    common.append(i)

        if common != []:
            return True
        else:
            return False


    def overlapping_3(l1, l2) -> bool:

        for i in l1:
            if i in l2:
                return True  # Immediately exit
        else:
            return False


    if __name__ == "__main__":

        test_l1 = ["a", "b", "c"]
        test_l2 = ["c", "d", "e"]
        test_l3 = [1, 2, 3]

        funcs = overlapping_1, overlapping_2, overlapping_3

        for f in funcs:
            print(f(test_l1, test_l2), test_l1, test_l2)
            print(f(test_l1, test_l3), test_l1, test_l3)

Filed under:
#
#
Words: 318 words approx.
Time to read: 1.27 mins (at 250 wpm)
Keywords:
, , , , , , , , ,

Other suggested posts

  1. 29.11.2023 at 11:04 pm / Of Witchers By Trade
  2. 23.03.2023 at 11:12 am / Copywork vs Master Studies
  3. 10.06.2022 at 07:44 pm / Teach Thy Tongue to Say: 'I Do Not Know'
  4. 11.02.2021 at 12:56 am / 46 Simple Python Exercises/#01
  5. 05.02.2020 at 10:26 pm / Nostalgic Raging Streets
  6. 12.07.2015 at 12:00 am / José Mujica's Humility
  7. 16.02.2014 at 12:00 am / Don't Care Too Much About Gear
  8. 26.12.2013 at 12:00 am / Teal Stares
  9. 16.03.2012 at 12:00 am / Sentient Vocal Directives
  10. 15.03.2012 at 12:00 am / Cel-Shaded Arena
© Wan Zafran. See disclaimer.