Flattening a nested tuple in order to make an integer grid?

Viewed 29

My Homework question: -

Write a function called intGrid that takes n and d as keyword parameters n and dim respectively, and returns a Python set containing the points in the grid as Python tuples.

E.g. intGrid(n=2, dim=2) should return the set {(0, 0), (0, 1), (1, 0), (1, 1)}.

Basically n == Number of elements and dim == dimension required.

Here is the code snippet I have written for the above problem: -

def intGrid(n, dim):

    ''' Returns an integer grid of dimension dim consisting of non-negative integer coordinates in the range 
        0 to n-1. 
    '''
    
    onedtuple = () # A tuple of 1 D values
    
    for x in range(n):
        onedtuple = onedtuple + (x,)
    
    fertiletuple = onedtuple # Fertile tuple will hold the updated tuples.
    
    answer = {} # Creating an empty list for comprehension usage.
    
    for x in range(1, dim):
        answer = {(y,z,) for y in onedtuple for z in fertiletuple}
        
        fertiletuple = tuple(answer) 

    return set(fertiletuple)

The problem I am facing is that the desired output contents are correct but its framework is not. For eg: -

The desired output for n = 2 and dim = 3 is: -

{(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)}

The output I am getting is: -

{(0, (0, 0)), (0, (0, 1)), (0, (1, 0)), (0, (1, 1)), (1, (0, 0)), (1, (0, 1)), (1, (1, 0)), (1, (1, 1))}

ie. a nested tuple.

The problem worsens when dim>3.

For eg. The desired output for n = 2 and dim = 4 is: -

{(0, 0, 0, 0),  (0, 0, 0, 1),  (0, 0, 1, 0),  (0, 0, 1, 1),  (0, 1, 0, 0),  (0, 1, 0, 1),  (0, 1, 1, 0),  (0, 1, 1, 1),  (1, 0, 0, 0),  (1, 0, 0, 1),  (1, 0, 1, 0), (1, 0, 1, 1),  (1, 1, 0, 0),  (1, 1, 0, 1),  (1, 1, 1, 0),  (1, 1, 1, 1)}

The output I am getting is: -

{(0, (0, (0, 0))),
 (0, (0, (0, 1))),
 (0, (0, (1, 0))),
 (0, (0, (1, 1))),
 (0, (1, (0, 0))),
 (0, (1, (0, 1))),
 (0, (1, (1, 0))),
 (0, (1, (1, 1))),
 (1, (0, (0, 0))),
 (1, (0, (0, 1))),
 (1, (0, (1, 0))),
 (1, (0, (1, 1))),
 (1, (1, (0, 0))),
 (1, (1, (0, 1))),
 (1, (1, (1, 0))),
 (1, (1, (1, 1)))}

I have tried all the methods to flatten the tuple, but for dim>=3, the nested tuple problem still persists. Please help.

Note: -

Value of n >= 1 and dim >=1

0 Answers
Related