# HackerRank Collections.namedtuple() solution in python | python question solution

Table of Contents

### collections.namedtuple()

Basically, namedtuples are easy to create, lightweight object types.
They turn tuples into convenient containers for simple tasks.
With namedtuples, you don’t have to use integer indices for accessing members of a tuple.

Example

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_product11``

Code 02

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

Task

Dr. John Wesley has a spreadsheet containing a list of student’s  and .

Your task is to help Dr. Wesley calculate the average marks of the students.

Note:
1. Columns can be in any order. IDs, marks, class and name can be written in any order in the spreadsheet.
2. Column names are `ID``MARKS``CLASS` and `NAME`. (The spelling and case type of these names won’t change.)

Input Format

The first line contains an integer , the total number of students.
The second line contains the names of the columns in any order.
The next  lines contains the  and , under their respective column names.

Constraints

Output Format

Print the average marks of the list corrected to 2 decimal places.

Sample Input

TESTCASE 01

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

TESTCASE 02

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

Sample Output

TESTCASE 01

``78.00``

TESTCASE 02

``81.00``

Explanation

TESTCASE 01

Average =

Can you solve this challenge in `4 lines of code or less`?
NOTE: There is `no penalty` for solutions that are correct but have more than 4 lines.

## Problem solution in Python 2 programming.

`# Enter your code here. Read input from STDIN. Print output to STDOUTfrom collections import namedtupleN = int(raw_input())headers = raw_input()student = namedtuple('Student',headers)students = []for i in range(N):    students.append(student(*raw_input().split()))print sum(list(map(lambda x: float(x.MARKS),students)))/len(students)`

## Problem solution in Python 3 programming.

`N, headers, total = int(input()), list(input().split()), 0for _ in range(N):    total += int(list(input().split())[headers.index('MARKS')])print(total/N)`

### Problem solution in pypy programming.

`# Enter your code here. Read input from STDIN. Print output to STDOUTfrom collections import namedtuplen, Student = input(), namedtuple('Student', raw_input())print "%.2f" %( sum([float(stud.MARKS) for stud in [Student(*raw_input().split()) for _ in xrange(n)]]) / n )`

### Problem solution in pypy3 programming.

`num_students = int(input())relevant_pos = Nonetotal = 0for num in range(num_students + 1):    if num == 0:        titles = list(filter(lambda el: el != '', input().split(' ')))        relevant_pos = titles.index('MARKS')        continue    total += int(list(filter(lambda el: el != '', input().split(' ')))[relevant_pos])print(round(float(total) / num_students, 2))`