Использование классов для сортировки списков

Автор:admin Дата: 16 сентября 2020 г.

Использование классов для сортировки

from operator import itemgetter, attrgetter, methodcaller

class Student():
	def __init__(self,name,age,height,points):
		self.name = name
		self.age = age
		self.height = height
		self.points = sum(map(int,points.split()))
	
	def __str__(self):
		return self.name + ' '+ str(self.age) + ' ' + str(self.height) + ' ' + str(self.points)
		# или так:
		#return ' '.join(map(str,(self.name,self.age,self.height,self.points)))
	
	
	

source_data = [
('Вася','25 лет','175 см','10 21 12'),
('Маша','12 лет','125 см','20 22 30'),
('Маша','11 лет','126 см','30 23 20'),
('Маша','10 лет','127 см','40 24 50'),
('Игорь','13 лет','180 см','50 25 20'),
('Катя','25 лет','165 см','60 26 24'),
('Катя','26 лет','175 см','70 27 23'),
('Катя','27 лет','172 см','80 28 32'),
('Катя','28 лет','171 см','90 29 30'),
('Катя','28 лет','172 см','90 29 30'),
('Катя','28 лет','173 см','90 29 30'),
('Катя','28 лет','174 см','90 29 30'),
]

data = []
for x in source_data:
	data.append(Student(*x))


print('сортировка по имени')
for x in sorted(data,key=attrgetter('name')): 
	print(x)
print()

print('сортировка по возрасту')
for x in sorted(data,key=attrgetter('age')): 
	print(x)
print()

print('сортировка по росту')
for x in sorted(data,key=attrgetter('height')): 
	print(x)
print()

print('сортировка по имени, внутри имени по росту')
for x in sorted(data,key=attrgetter('name','height')):
	print(x)
print()

print('сортировка по росту, внутри по имени, внутри по возрасту')
for x in sorted(data,key=attrgetter('height','name','age')):
	print(x)
print()



Яндекс.Метрика