i have simple python 2.7 function:
def sort_rows(mat): mat = [sorted(i) in mat] however, when run:
m = [[4, 5, 2, 8], [3, 9, 6, 7]] sort_rows(m) print(m) i get
[[4, 5, 2, 8], [3, 9, 6, 7]] why wasn't m edited? thought python functions passed lists reference? missing something?
when sort_rows called mat points same list m points to. statement, however, changes that:
mat = [sorted(i) in mat] after above executed, mat points different list. m unchanged.
to change m in place:
>>> def sort_rows(mat): ... i, row in enumerate(mat): ... mat[i] = sorted(row) ... >>> sort_rows(m) >>> m [[2, 4, 5, 8], [3, 6, 7, 9]] the statement mat[i] = sorted(row) changes i-th element of mat not change list mat points to. hence, m changed also.
alternatively, can have function return list sorted rows:
>>> def rowsort(mat): ... return [sorted(i) in mat] ... >>> m = [[4, 5, 2, 8], [3, 9, 6, 7]] >>> m = rowsort(m) >>> m [[2, 4, 5, 8], [3, 6, 7, 9]]
Comments
Post a Comment