Python Collections.namedtuple() HackerRank Solution
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_product
11
Code 02
>>> 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
Task
Dr. John Wesley has a spreadsheet containing a list of student’s IDs, marks, class and name.
Your task is to help Dr. Wesley calculate the average marks of the students.
Average = Sum of all marks / Total 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 N, the total number of students.
The second line contains the names of the columns in any order.
The next N lines contains the marks, IDs, name and class, under their respective column names.
Constraints
0 < N <= 100
Output Format
Print the average marks of the list corrected to 2 decimal places.
Sample Input
TESTCASE 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
TESTCASE 02
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
Sample Output
TESTCASE 01
78.00
TESTCASE 01
81.00
Explanation
Average = (97 + 50 + 91 + 72 + 80) / 5
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.
Solution:
from collections import namedtuple
input_ = int(input())
my_fields = input().split()
total_marks = 0
for _ in range(input_):
students = namedtuple('my_student', my_fields)
MARKS, CLASS, NAME, ID = input().split()
my_student = students(MARKS, CLASS, NAME, ID)
total_marks += int(my_student.MARKS)
print((total_marks / input_))
Steps Used in solving the problem -
Step 1: First we imported namedtuple from collections.
Step 2: then we created input for input_ and my_fields. And we also created a variable to store total marks.
Step 3: After this, we created a for loop in range of out input_.
Step 4: then we created namedtuple with my_student as key and my_fields as value.
Step 5: then we created input for MARKS, CLASS, NAME, and ID. and, we have also stored our input in students.
Step 6: In last we divided the total marks by input and printed it.