Collections.namedtuple() Pergunta prática sobre Python

Nov 28 2022
collections.namedtuple() Basicamente, os namedtuples são tipos de objetos leves e fáceis de criar.

collections.namedtuple()
Basicamente, os namedtuples são tipos de objetos leves e fáceis de criar.
Eles transformam tuplas em recipientes convenientes para tarefas simples.

Com as tuplas nomeadas, você não precisa usar índices inteiros para acessar os membros de uma tupla.

Exemplo :

Código 01

>>> from collections import namedtuple
>>> Point = namedtuple('Point','x,y')
>>> pt1 = Point(1,2)
>>> pt2 = Point(3,4)
>>> dot_product = ( pt1.x * pt2.x ) +( pt1.y * pt2.y )
>>> print dot_product
11

>>> from collections import namedtuple
>>> Car = namedtuple('Car','Price Mileage Colour Class')
>>> xyz = Car(Price = 100000, Mileage = 30, Colour = 'Cyan', Class = 'Y')
>>> print xyz
Car(Price=100000, Mileage=30, Colour='Cyan', Class='Y')
>>> print xyz.Class
Y

Dr. John Wesley tem uma planilha contendo uma lista de IDs de alunos, notas, classe e nome.
Sua tarefa é ajudar o Dr. Wesley a calcular as notas médias dos alunos.

Observação:

1. As colunas podem estar em qualquer ordem. IDs, marcas, classe e nome podem ser escritos em qualquer ordem na planilha.

2. Os nomes das colunas são ID, MARKS, CLASS e NAME. (A ortografia e o tipo de caso desses nomes não serão alterados.)

Formato de entrada :

A primeira linha contém um inteiro N, o número total de alunos.
A segunda linha contém os nomes das colunas em qualquer ordem.

As próximas N linhas contêm as marcas, IDs, nome e classe, sob seus respectivos nomes de coluna.

Restrições :

  • 0 <= N <= 100

Imprima as notas médias da lista corrigidas para 2 casas decimais.

Exemplo de entrada:

CASO DE TESTE 01

5
ID         MARKS      NAME       CLASS     
1          97         Raymond    7         
2          50         Steven     4         
3          91         Adrian     9         
4          72         Stewart    5         
5          80         Peter      6

5
MARKS      CLASS      NAME       ID        
92         2          Calum      1         
82         5          Scott      2         
94         2          Jason      3         
55         8          Glenn      4         
82         2          Fergus     5

CASO DE TESTE 01

78.00

81.00

CASO DE TESTE 01

Média = (97 + 50 + 91 + 72 + 80)/5

Você consegue resolver este desafio em 4 linhas de código ou menos?

NOTA: Não há penalidade para soluções corretas, mas com mais de 4 linhas.

Solução

import collections

n = int(input())
scol = ','.join(input().split())
Student = collections.namedtuple('Student',scol)

sum = 0
for i in range(n):
    row = input().split()
    student = Student(*row)
    sum += int(student.MARKS)

print(sum/n)