A learning repository for Python programming exercises. https://ekika.co/learn-python
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

3.1 KiB

Python List Exercises

These exercises will help you get really good at using lists in Python. You'll practice things like loops, slicing, grouping, and working with nested lists.


PYEKX-6280ca9a

Flatten a Deeply Nested List

Problem

Write a function flatten_list(nested_list) that flattens an arbitrarily nested list into a single-level list.

Example

flatten_list([1, [2, 3], [4, [5, 6], 7]])
# Output: [1, 2, 3, 4, 5, 6, 7]

Why? (Why it matters)

Flattening is common in:

  • ETL pipelines
  • JSON parsing
  • Recursive DOM traversal

Pro Constraints

  • Must support arbitrary levels of nesting.
  • Must not mutate the input list.
  • Use recursion or a stack-based approach.
  • Bonus: Implement both recursive and iterative versions.

PYEKX-1d45ec3e

Group Consecutive Duplicates

Problem

Write a function group_consecutive(lst) that groups only consecutive duplicate elements into sublists.

Example

group_consecutive([1, 1, 2, 2, 2, 3, 1, 1])
# Output: [[1, 1], [2, 2, 2], [3], [1, 1]]

Why?

This mimics:

  • Run-length encoding
  • Log event grouping
  • Real-time batching by last-seen state

Pro Constraints

  • Avoid using third-party libraries.
  • Maintain original order.
  • Think about how to handle empty input and non-integer elements.

PYEKX-3c65900f

Rotate List (Bidirectional) k Times

Problem

Write a function rotate_list(lst, k) that rotates the list right by k steps.

Support negative k to rotate left.

Example

rotate_list([1, 2, 3, 4, 5], 2)
# Output: [4, 5, 1, 2, 3]

rotate_list([1, 2, 3, 4, 5], -2)
# Output: [3, 4, 5, 1, 2]

Why?

  • Common in buffer management, scheduling, circular data structures.
  • Reinforces modular math and slicing mastery.

Pro Constraints

  • Solve it using slicing.
  • Then try using only loops - no slicing.
  • Handle large k values: rotate_list([1,2,3], 100).

PYEKX-6a7bc172

List Difference (Ordered & Counted)

Problem

Write a function diff_lists(a, b) that removes one matching element in b for each occurrence found in a, preserving order.

Example

diff_lists([1, 2, 2, 3, 4], [2, 4])
# Output: [1, 2, 3]

Why?

  • Models real-world inventory adjustments.
  • Used in symmetric difference, record purging, filtering with quantity.

Pro Constraints

  • Do not use collections.Counter.
  • Optimize for readability and minimal mutations.
  • Bonus: Add a flag to toggle whether duplicates in b remove all vs one.

Pro Tips

  • Try solving without using libraries.
  • Then try versions using collections.Counter, itertools, or functools for practice.
  • Write unit tests for edge cases:
    • Empty lists
    • Deep nesting
    • Large k values
    • Negative numbers
      def test_flatten():
          assert flatten_list([1, [2], [[3]]]) == [1, 2, 3]
          assert flatten_list([]) == []
          assert flatten_list([[], [[], [[]]]]) == []
    
      def test_rotate():
          assert rotate_list([1,2,3], 0) == [1,2,3]
          assert rotate_list([1,2,3], 3) == [1,2,3]
          assert rotate_list([1,2,3], -1) == [2,3,1]