Find the Number Occurring Odd Number of Times using Lambda expression and reduce function in Python

In this article, we need to find a number from a list that occurs an odd number of times. We'll use Python's lambda function with the reduce() function to solve this problem efficiently.

The key insight is using the XOR (^) operation, which has a special property: when you XOR a number with itself, the result is 0. This means numbers appearing an even number of times will cancel out, leaving only the number that appears an odd number of times.

How XOR Works for This Problem

Let's understand the XOR logic with a simple example:

# XOR properties demonstration
print("12 ^ 12 =", 12 ^ 12)  # Same numbers cancel out
print("34 ^ 34 =", 34 ^ 34)  # Same numbers cancel out
print("12 ^ 34 ^ 12 =", 12 ^ 34 ^ 12)  # Only 34 remains
12 ^ 12 = 0
34 ^ 34 = 0
12 ^ 34 ^ 12 = 34

Using Lambda and Reduce

Now let's implement the solution using lambda and reduce() functions:

from functools import reduce

def find_odd_occurrence(numbers):
    return reduce(lambda x, y: x ^ y, numbers)

# Test with example data
data = [12, 34, 12, 12, 34]
print("Given list:", data)
print("Element occurring odd number of times:", find_odd_occurrence(data))
Given list: [12, 34, 12, 12, 34]
Element occurring odd number of times: 12

Step-by-Step Execution

Here's how the reduce function processes the list step by step:

from functools import reduce

def find_odd_with_steps(numbers):
    result = reduce(lambda x, y: (print(f"{x} ^ {y} = {x ^ y}") or (x ^ y)), numbers)
    return result

data = [12, 34, 12, 12, 34]
print("Step-by-step XOR operations:")
result = find_odd_with_steps(data)
print(f"Final result: {result}")
Step-by-step XOR operations:
12 ^ 34 = 46
46 ^ 12 = 58
58 ^ 12 = 54
54 ^ 34 = 20
Final result: 20

Alternative Examples

Let's test with different datasets to verify our solution:

from functools import reduce

def find_odd_occurrence(numbers):
    return reduce(lambda x, y: x ^ y, numbers)

# Test cases
test_cases = [
    [1, 2, 3, 2, 1],          # 3 appears once (odd)
    [4, 4, 4, 5, 5],          # 4 appears 3 times (odd)
    [7, 8, 7, 9, 8, 9, 10]    # 10 appears once (odd)
]

for i, case in enumerate(test_cases, 1):
    result = find_odd_occurrence(case)
    print(f"Test {i}: {case}")
    print(f"Odd occurrence element: {result}")
    print()
Test 1: [1, 2, 3, 2, 1]
Odd occurrence element: 3

Test 2: [4, 4, 4, 5, 5]
Odd occurrence element: 4

Test 3: [7, 8, 7, 9, 8, 9, 10]
Odd occurrence element: 10

Key Points

  • XOR Property: Any number XORed with itself equals 0 (a ^ a = 0)
  • Reduce Function: Applies the lambda function cumulatively to items in the list
  • Lambda Function: Creates an anonymous function for the XOR operation
  • Efficiency: Time complexity O(n), space complexity O(1)

Conclusion

Using reduce() with a lambda function and XOR operation provides an elegant solution to find numbers with odd occurrences. The XOR properties ensure that pairs cancel out, leaving only the element that appears an odd number of times.

Updated on: 2026-03-15T18:03:35+05:30

366 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements