Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

457
Vistas
Python, ¿cómo ordenar la lista de objetos?

Tengo una lista de objetos que se parece a esto.

 hand = [ Card(10, 'H'), Card(2,'h'), Card(12,'h'), Card(13, 'h'), Card(14, 'h') ]

Card(10, 'H) aquí no es una tupla, sino un objeto. Sé cómo ordenar esta lista si cada elemento de la lista estuviera en forma de tupla, así,

 hand = sorted(hand, key = lambda x: x[0])

pero no tengo idea de cómo ordenar una lista de objetos. Quiero ordenar mi lista por el primer valor de entrada, que es el número en Card()

¿Cómo puedo hacer esto?

Editar: Aquí está la definición de Card().

 class Card(object): RANKS = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) SUITS = ('C', 'D', 'H', 'S') def __init__(self, rank=12, suit='S'): if (rank in Card.RANKS): self.rank = rank else: self.rank = 12 if (suit in Card.SUITS): self.suit = suit.upper() else: self.suit = 'S' def __str__(self): if (self.rank == 14): rank = 'A' elif (self.rank == 13): rank = 'K' elif (self.rank == 12): rank = 'Q' elif (self.rank == 11): rank = 'J' else: rank = str(self.rank) return rank + self.suit def __eq__(self, other): return (self.rank == other.rank) def __ne__(self, other): return (self.rank != other.rank) def __lt__(self, other): return (self.rank < other.rank) def __le__(self, other): return (self.rank <= other.rank) def __gt__(self, other): return (self.rank > other.rank) def __ge__(self, other): return (self.rank >= other.rank)
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La idea sigue siendo la misma. Solo que buscará un atributo específico en el objeto de clase.

Para su clase de tarjeta, podría hacer algo como esto:

 hand = [ Card(10, 'H'), Card(2,'h'), Card(12,'h'), Card(13, 'h'), Card(14, 'h') ]

Entonces podrías hacer

 sorted_cards = sorted(hand, key=lambda x: x.rank)

La salida se parece a esto:

 >>> [card.number for card in sorted_cards] [2, 10, 12, 13, 14]
over 4 years ago · Santiago Trujillo Denunciar

0

Este es el enfoque orientado a objetos. Como mínimo, debe especificar las operaciones __eq__ y __lt__ para que esto funcione. Luego solo usa sorted(hand) .

 class Card(object): def __init__(self, rank, suit): self.rank = rank self.suit = suit def __eq__(self, other): return self.rank == other.rank and self.suit == other.suit def __lt__(self, other): return self.rank < other.rank hand = [Card(10, 'H'), Card(2, 'h'), Card(12, 'h'), Card(13, 'h'), Card(14, 'h')] hand_order = [c.rank for c in hand] # [10, 2, 12, 13, 14] hand_sorted = sorted(hand) hand_sorted_order = [c.rank for c in hand_sorted] # [2, 10, 12, 13, 14]

Es una buena práctica hacer que la lógica de clasificación de objetos, si corresponde, sea una propiedad de la clase en lugar de incorporarla en cada instancia en la que se requiera la clasificación. De esta manera, puede llamar a sorted(list_of_objects) cada vez.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda