cornjuliox - 1 year ago 196

Python Question

So I'm stuck on this problem where I've been asked to write an function in Python that checks to see if an n-dimensional array (is that what they're called?) is "symmetric" or not, meaning that row 1 of the array == column 1, row 2 == column 2, row 3 == column 3, etc so on and so forth. The goal is to have a function that returns the boolean True if its symmetric, and False if its not.

I've managed to write a function that works, but it only work on lists whose sizes are perfect squares, (e.g 2 x 2, 4 x 4), and a few of my test cases are of "irregular" sizes (e.g 2 x 5, 3 x 2). For those lists I end up getting a list index out of range error Code here:

`def symmetric(square):`

final_result = []

x = 0

y = 0

while x < len(square):

row_list = []

col_list = []

while y < len(square[x]):

print "(x, y): %d, %d" % (x, y)

print "(y, x): %d, %d" % (y, x)

row_list.append(square[x][y])

col_list.append(square[y][x])

y = y + 1

if row_list == col_list:

final_result.append(True)

else:

final_result.append(False)

x = x + 1

for x in final_result:

if x == False:

return False

return True

And the test cases that I'm failing on here:

`print symmetric([[1, 2, 3, 4],`

[2, 3, 4, 5],

[3, 4, 5, 6]])

#Expected result: >>> False

#List index out of range

# This one actually returns the correct result, I'm just including it here

# for reference.

#print symmetric([["cat", "dog", "fish"],

# ["dog", "dog", "fish"],

# ["fish", "fish", "cat"]])

#Expected result: >>> True

#Actual result: >>> True

print symmetric([[1,2,3],

[2,3,1]])

#Expected Result: >>> False

#Actual result: list index out of range

Can someone help me modify the code so that it will work on these "irregularly shaped" arrays?

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

You can put this check at the start of your function:

```
for row in square:
if len(row) != len(square):
return False
```

Or maybe shorter

```
if not all(len(square) == len(row) for row in square): return False
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**