forked from course-work/week1
Add 04-matrix-sort/row_col_sort_class.py
This commit is contained in:
parent
b7133f3362
commit
4e1d357998
80
04-matrix-sort/row_col_sort_class.py
Normal file
80
04-matrix-sort/row_col_sort_class.py
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
class Matrix:
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
if kwargs.get('file'):
|
||||||
|
self.matrix = self.__from_file(kwargs['file'])
|
||||||
|
elif kwargs.get('text'):
|
||||||
|
self.matrix = self.__parse(kwargs['text'])
|
||||||
|
elif kwargs.get('matrix'):
|
||||||
|
self.matrix = kwargs['matrix']
|
||||||
|
|
||||||
|
def __from_file(self, file):
|
||||||
|
with open(file, 'r') as file:
|
||||||
|
|
||||||
|
return self.parse(file.read())
|
||||||
|
|
||||||
|
def __parse(self, matrix):
|
||||||
|
out = []
|
||||||
|
for row in matrix.split('\n'):
|
||||||
|
out.append([int(col) for col in row.split()])
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sum(self):
|
||||||
|
row_sum = []
|
||||||
|
col_sum = [0 for col in range(len(self.matrix)+1)]
|
||||||
|
|
||||||
|
for row in self.matrix:
|
||||||
|
row_sum.append(sum(row))
|
||||||
|
for idx, col in enumerate(row):
|
||||||
|
col_sum[idx] += col
|
||||||
|
|
||||||
|
return row_sum, col_sum
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sort_row(self):
|
||||||
|
row_sum, col_sum = self.sum
|
||||||
|
out = []
|
||||||
|
for index, row in sorted( [i for i in enumerate(row_sum)], key=lambda x:x[1]):
|
||||||
|
out.append(self.matrix[index])
|
||||||
|
|
||||||
|
return Matrix(matrix=out);
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sort_col(self):
|
||||||
|
row_sum, col_sum = self.sum
|
||||||
|
out = []
|
||||||
|
places = sorted( [i for i in enumerate(col_sum)], key=lambda x:x[1])
|
||||||
|
|
||||||
|
for index, row in enumerate(self.matrix):
|
||||||
|
out.append([row[i[0]] for i in places])
|
||||||
|
|
||||||
|
return Matrix(matrix=out)
|
||||||
|
|
||||||
|
def __get_element_width(self):
|
||||||
|
max = 0
|
||||||
|
for row in self.matrix:
|
||||||
|
for element in row:
|
||||||
|
if max < len(str(element)):
|
||||||
|
max = len(str(element))
|
||||||
|
|
||||||
|
return max
|
||||||
|
|
||||||
|
def __str__(self, width=None):
|
||||||
|
width = self.__get_element_width()
|
||||||
|
out = ''
|
||||||
|
|
||||||
|
for row in self.matrix:
|
||||||
|
out +=' | '.join(['{:{}d}'.format(el, width) for el in row])
|
||||||
|
out += '\n'
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
m1 ='''10 5 4 20
|
||||||
|
9 33 27 16
|
||||||
|
11 6 55 3'''
|
||||||
|
|
||||||
|
m1 = Matrix(text=m1)
|
||||||
|
# print(m1.sum)
|
||||||
|
print(m1.sort_row)
|
||||||
|
print(m1.sort_col)
|
Loading…
x
Reference in New Issue
Block a user