Индекс списка с помощью for-loops python

#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