Collections.namedtuple () Question de pratique Python
collections.namedtuple()
Fondamentalement, les namedtuples sont des types d'objets légers et faciles à créer.
Ils transforment les tuples en conteneurs pratiques pour des tâches simples.
Avec les tuples nommés, vous n'avez pas besoin d'utiliser des indices entiers pour accéder aux membres d'un tuple.
Exemple :
Code 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
Le Dr John Wesley dispose d'une feuille de calcul contenant une liste des identifiants, des notes, de la classe et du nom des étudiants.
Votre tâche est d'aider le Dr Wesley à calculer les notes moyennes des étudiants.

Noter:
1. Les colonnes peuvent être dans n'importe quel ordre. Les identifiants, les marques, la classe et le nom peuvent être écrits dans n'importe quel ordre dans la feuille de calcul.
2. Les noms des colonnes sont ID, MARKS, CLASS et NAME. (L'orthographe et la casse de ces noms ne changeront pas.)
Format d'entrée :
La première ligne contient un entier N, le nombre total d'élèves.
La deuxième ligne contient les noms des colonnes dans n'importe quel ordre.
Les N lignes suivantes contiennent les marques, les identifiants, le nom et la classe, sous leurs noms de colonne respectifs.
Contraintes :
- 0 <= N <= 100
Imprimez les notes moyennes de la liste corrigées à 2 décimales.
Exemple d'entrée :
CAS D'ESSAI 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
CAS D'ESSAI 01
78.00
81.00
CAS D'ESSAI 01
Moyenne = (97 + 50 + 91 + 72 + 80)/5
Pouvez-vous résoudre ce défi en 4 lignes de code ou moins ?
REMARQUE : Il n'y a pas de pénalité pour les solutions correctes mais comportant plus de 4 lignes.
La solution
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)
