#python #python-3.x #list #for-loop #attributes
#python #python-3.x #Список #цикл for #атрибуты
Вопрос:
Это мой код:
class People:
def __repr__(self):
return f"A('{self.name}', {self.age}, {self.height})"
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def sorted_list():
people = []
fil = open('peoples.txt', 'r').readlines()
for i in file:
i = i.split()
people.append(People(i[0], (i[1]))
people.sort(key=lambda a: (a.age, a.name))
Мой текстовый файл выглядит следующим образом:
List:
Anna 13
Mark 44
James 80
Hanna 45
Я хочу, чтобы атрибут «высота» представлял позицию каждого человека в списке с помощью цикла for. Мой код уже сортирует людей в списке в соответствии с их возрастом, от младшего к старшему. Теперь я хочу, чтобы код использовал цикл for, чтобы атрибут height присваивал каждому пользователю из отсортированного списка его позицию в списке, то есть присваивал Анне номер 1, Ханне номер 2, Марку номер 3 и Джеймсу номер 4.
Это то, что я пробовал до сих пор, но это не работает:
i = 0
for height in people:
i = 1
people.height = int(i)
people = sorted(people)
return people
У кого-нибудь есть идея, что я мог бы сделать?
Комментарии:
1. Вам не нужно вызывать sorted внутри цикла. Также вы можете использовать функцию enumerate() для получения индекса в цикле.( docs.python.org/3/library /… )
Ответ №1:
Для этого вы можете выполнить итерацию, используя цикл с диапазоном:
for i in range(len(people)):
# 1 to start enumeration with 1 instead of 0
people[i].height = i 1
Комментарии:
1. Большое вам спасибо!
Ответ №2:
Как упоминалось в комментариях, вы можете использовать enumerate, как показано ниже
i = 0 # starting point
for height, people_obj in enumerate(people, i):
people_obj.height = height
# sort your list people