cornjuliox - 1 month ago 30
Python Question

# Python - Algorithm to determine if a list is symmetric

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?

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