Return the oldest person from a list with tuples

Asked

Viewed 347 times

0

The question is this: ;

Consider that a person has the format Tuplo - (name, year of birth, city).

Create a senior function that receives a list of people and returns the oldest person in the group.

I’m lost in this code someone can help me ?

I have the following lists;

pessoa=[("pedro",1999,"porto"),("pedro2",2020,"feira"),("pedro3",2002,"sjm")]

velho=[("pedr22o",2000,"porto22")]

for i in pessoa:
    for x in velho:
        if i[1] < x[1]:
            velho = i
print(velho)

3 answers

8


You can use the function min() to get the tuple that has the smallest year of birth using the parameter key of function.

from operator  import itemgetter

pessoas = [
    ("pedro", 1999, "porto"),
    ("pedro2", 2020, "feira"),
    ("pedro3", 2002, "sjm"),
]

velho = min(pessoas, key=itemgetter(1))

print(velho)  # ("pedro", 1999, "porto")

Repl.it with the code working.


Above I used the operator itemgetter module operator to facilitate, but the following code does the same thing:

def itemgetter(n_item):
    def getter(tupla):
        return tupla[n_item]
    return getter

pessoas = [
    ("pedro", 1999, "porto"),
    ("pedro2", 2020, "feira"),
    ("pedro3", 2002, "sjm"),
]

velho = min(pessoas, key=itemgetter(1))

print(velho)  # ("pedro", 1999, "porto")

itemgetter returns a function that always takes the item n of the received parameter, in this case a tuple but could be a list or any class that implements the method __getitem__().

5

No need to walk velho, and it doesn’t even have to be a list.

pessoa=[("pedro",1999,"porto"),("pedro2",2020,"feira"),("pedro3",2002,"sjm")]
velho=("pedr22o",2000,"porto22")

for i in pessoa:
    if i[1] < velho[1]:
        velho = i
print(velho)

Ali you were assigning a tuple to a list.

1

Based on the conditions for the answer I implemented the solution to the problem. I believe that there is no need to explain the code because it is all commented on. But for any doubt ,I will be here.

# Lista de pessoas
pessoas = [
  ("pedro" ,1999 ,"porto") ,
  ("paulo" ,2016 ,"feira de santana") ,
  ("jonatha" ,2002 ,"simao dias") ,
  ("roberto" ,1987 ,"salvador")
]
def mais_velha(pessoas):
  """
  Função respossável por retornar a pessoa
  mais velha de uma lista.

  Esta função recebe apenas um argumento ,que é
  uma lista contendo tuplas que armazenam
  informações como:
    nome       - nome da pessoa
    nascimento - data do nascimento da pessoa
    cidade     - cidade atual onde vive a pessoa.

  A partir do argumento da funcão ela reordena
  a lista para que a pessoa mais velha (com
  nascimento mais antigo) seja a primeira da lista.
  """

  # Variável que auxilia na organização
  # da ordem das pessoas.
  aux = None

  # For loops responsaveis por toda a organização
  # da ordem das pessoas.
  for pessoa_x in range(0 ,len(pessoas) ,1):
    for pessoa_y in range(0 ,len(pessoas) ,1):
      # Teste e possível troca da ordem das pessoas
      # testando a cada interação se a pessoa anteriar
      # (pessoa_x) é mais nova que a pessoa atual
      # (pessoa_y).
      if pessoas[pessoa_x][1] < pessoas[pessoa_y][1]:
        aux = pessoas[pessoa_x]
        pessoas[pessoa_x] = pessoas[pessoa_y]
        pessoas[pessoa_y] = aux

  # Retorno da primeira pessoa da lista ,
  # a mais velha.
  return pessoas[0]

# Exibe a pessoa mais velha ,"roberto"
print(mais_velha(pessoas))

Browser other questions tagged

You are not signed in. Login or sign up in order to post.