Python – Cross Join every Kth segment

Cross joining every Kth segment means alternating between two lists by taking K elements from the first list, then K elements from the second list, and repeating this pattern. This creates a merged sequence that preserves segments of each original list.

Using Generator Function

A generator function can efficiently yield elements by alternating between lists in K-sized segments ?

def cross_join_kth_segment(list1, list2, k):
    index1 = 0
    index2 = 0
    
    while index1 < len(list1) and index2 < len(list2):
        # Yield K elements from first list
        for i in range(k):
            if index1 < len(list1):
                yield list1[index1]
                index1 += 1
        
        # Yield K elements from second list  
        for i in range(k):
            if index2 < len(list2):
                yield list2[index2]
                index2 += 1

# Example with K=2
list1 = [24, 13, 82, 22, 65, 74]
list2 = [55, 63, 17, 44, 33, 15]
k = 2

print("First list:", list1)
print("Second list:", list2)
print("K value:", k)

result = list(cross_join_kth_segment(list1, list2, k))
print("Cross joined result:", result)
First list: [24, 13, 82, 22, 65, 74]
Second list: [55, 63, 17, 44, 33, 15]
K value: 2
Cross joined result: [24, 13, 55, 63, 82, 22, 17, 44, 65, 74, 33, 15]

Using List Slicing Approach

An alternative approach using list slicing to extract K-sized segments ?

def cross_join_slicing(list1, list2, k):
    result = []
    max_len = max(len(list1), len(list2))
    
    for i in range(0, max_len, k):
        # Add K elements from first list
        result.extend(list1[i:i+k])
        # Add K elements from second list  
        result.extend(list2[i:i+k])
    
    return result

list1 = [1, 2, 3, 4, 5, 6]
list2 = [10, 20, 30, 40, 50, 60]
k = 3

result = cross_join_slicing(list1, list2, k)
print("Original lists:", list1, list2)
print("Cross joined with K=3:", result)
Original lists: [1, 2, 3, 4, 5, 6] [10, 20, 30, 40, 50, 60]
Cross joined with K=3: [1, 2, 3, 10, 20, 30, 4, 5, 6, 40, 50, 60]

Comparison

Method Memory Usage Best For
Generator Function Low (lazy evaluation) Large datasets
List Slicing Higher (creates segments) Simple implementation

Conclusion

Cross joining every Kth segment alternates between lists in K-sized chunks. Use generators for memory efficiency or list slicing for simpler code when working with smaller datasets.

Updated on: 2026-03-26T01:15:05+05:30

276 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements