Hone logo
Hone
Problems

Pythonic Condition Checker: Mastering any and all

This challenge focuses on understanding and implementing the built-in Python functions any() and all(). These functions are incredibly useful for concisely checking conditions across iterables, making your code more readable and efficient. You'll implement your own versions to solidify your grasp of their logic.

Problem Description

You are tasked with creating two Python functions: my_any and my_all. These functions will mimic the behavior of Python's built-in any() and all() functions, respectively.

my_any(iterable): This function should return True if at least one element in the iterable evaluates to True. If the iterable is empty or all elements evaluate to False, it should return False.

my_all(iterable): This function should return True if all elements in the iterable evaluate to True. If the iterable is empty or at least one element evaluates to False, it should return False.

Key Requirements:

  • Your functions must accept a single argument: an iterable (e.g., a list, tuple, string, generator).
  • You should not use the built-in any() or all() functions within your implementations.
  • Your functions should handle various truthy and falsy values in Python (e.g., 0, None, "", [], True, 1, "hello").
  • Consider the behavior for an empty iterable.

Examples

Example 1:

Input: [1, 0, 'hello', '', []]
Output:
my_any: True
my_all: False
Explanation:
my_any returns True because 'hello' and 1 are truthy.
my_all returns False because 0, '', and [] are falsy.

Example 2:

Input: [True, True, True]
Output:
my_any: True
my_all: True
Explanation:
my_any returns True because at least one element is truthy.
my_all returns True because all elements are truthy.

Example 3:

Input: []
Output:
my_any: False
my_all: True
Explanation:
An empty iterable for my_any evaluates to False (no truthy elements).
An empty iterable for my_all evaluates to True (vacuously true - there are no falsy elements to break the condition).

Example 4:

Input: [0, False, None, ""]
Output:
my_any: False
my_all: False
Explanation:
my_any returns False because all elements are falsy.
my_all returns False because at least one element (in this case, all) is falsy.

Constraints

  • The input iterable can be of any type that Python supports as an iterable.
  • The elements within the iterable can be of any Python type.
  • Your implementations should be efficient enough to handle iterables with up to 10,000 elements without significant performance degradation (though optimizing for extreme cases is not the primary goal).

Notes

  • Remember that in Python, many values are considered "falsy" (evaluate to False in a boolean context), including 0, None, empty sequences (like "", [], ()), and empty mappings (like {}). All other values are generally considered "truthy."
  • Think about how you can iterate through the elements and what condition would cause you to return True or False early.
  • The behavior of all() on an empty iterable is a key edge case to get right.
Loading editor...
python