Collections.namedtuple() Python Pregunta de práctica

Nov 28 2022
collections.namedtuple() Básicamente, las tuplas con nombre son tipos de objetos ligeros y fáciles de crear.

collections.namedtuple()
Básicamente, las namedtuples son tipos de objetos ligeros y fáciles de crear.
Convierten las tuplas en contenedores convenientes para tareas simples.

Con las tuplas nombradas, no es necesario utilizar índices enteros para acceder a los miembros de una tupla.

Ejemplo :

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

El Dr. John Wesley tiene una hoja de cálculo que contiene una lista de identificaciones, marcas, clases y nombres de los estudiantes.
Tu tarea es ayudar al Dr. Wesley a calcular las calificaciones promedio de los estudiantes.

Nota:

1. Las columnas pueden estar en cualquier orden. Las identificaciones, las marcas, la clase y el nombre se pueden escribir en cualquier orden en la hoja de cálculo.

2. Los nombres de las columnas son ID, MARCAS, CLASE y NOMBRE. (La ortografía y el tipo de mayúsculas y minúsculas de estos nombres no cambiarán).

Formato de entrada:

La primera línea contiene un número entero N, el número total de estudiantes.
La segunda línea contiene los nombres de las columnas en cualquier orden.

Las siguientes N líneas contienen las marcas, ID, nombre y clase, bajo sus respectivos nombres de columna.

Restricciones:

  • 0 <= norte <= 100

Imprime las notas medias de la lista corregida a 2 decimales.

Entrada de muestra:

CASO DE PRUEBA 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 PRUEBA 01

78.00

81.00

CASO DE PRUEBA 01

Promedio = (97 + 50 + 91 + 72 + 80)/5

¿Puedes resolver este desafío en 4 líneas de código o menos?

NOTA: No hay penalización por soluciones que son correctas pero tienen más de 4 líneas.

Solución

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)