Jak mogę posortować listę obiektów alfabetycznie bez użycia żadnych metod Python? Na przykład dla studenta klasy z nazwą atrybutów, klasa Próbowałem pisać następującego kodu, ale nie działa:

for i in range (0, len(studentList)-1):
    if studentList[i].getName() > studentList[i+1].getName():
        aux = studentList[i].getName()
        studentList[i].getName() = studentList[i+1].getName()
        studentList[i+1].getName() = aux
0
user1012732 26 listopad 2013, 15:33

2 odpowiedzi

Najlepsza odpowiedź

Próbujesz przypisać wynik wezwania {x0}}, który zbyt dobrze pracuje. Użyj studentList[i] i studentList[i + 1] bezpośrednio ; Potrzebujesz tylko wywołania wywołania .getName(), aby porównać nazwy uczniów:

aux = studentList[i]
studentList[i] = studentList[i+1]
studentList[i+1] = aux

Aby zamienić dwa przedmioty na liście, wystarczy użyć wielu zadania (nie ma potrzeby dodatkowej zmiennej tymczasowej):

studentList[i], studentList[i+1] = studentList[i+1], studentList[i]

Bez więcej myśli w algorytmie sortowania, oczywiście twoja prosta pętla nie spowodowała pełnego rodzaju.

3
Martijn Pieters 26 listopad 2013, 11:40

Co próbujesz zrobić, to używać bańki:

def bubble_sort(list_of_students):
    """
    Runs the bubble sort algorithm on the student class
    @rtype : list
    @param list_of_students: List of students to be sorted
    @type list_of_students: list
    """
    for _ in list_of_students:
        for j in xrange(len(list_of_students) - 1):
            if list_of_students[j] > list_of_students[j + 1]:
                list_of_students[j + 1], list_of_students[j] = list_of_students[j], list_of_students[j + 1]

    return list_of_students

Spróbuj wykonać następujące czynności:

from random import randint, choice
import string


class Student(object):
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def __gt__(self, other):
        if isinstance(other, Student):
            return self.name > other.name
        raise Exception("Cannot compare Student to Not-A-Student")

    def __repr__(self):
        return "{name} => {grade}".format(name=self.name, grade=self.grade)


def bubble_sort(list_of_students):
    """
    Runs the bubble sort algorithm on the student class
    @rtype : list
    @param list_of_students: List of numbers to be sorted
    @type list_of_students: list
    """
    for _ in list_of_students:
        for j in xrange(len(list_of_students) - 1):
            if list_of_students[j] > list_of_students[j + 1]:
                list_of_students[j + 1], list_of_students[j] = list_of_students[j], list_of_students[j + 1]

    return list_of_students


l = [Student(choice(string.ascii_uppercase), randint(0, 10)) for i in range(10)]
print bubble_sort(l)
0
Games Brainiac 26 listopad 2013, 11:49