Collections.namedtuple() Câu hỏi thực hành Python
collections.namedtuple()
Về cơ bản, namedtuple rất dễ tạo, các kiểu đối tượng nhẹ.
Chúng biến các bộ dữ liệu thành các thùng chứa thuận tiện cho các tác vụ đơn giản.
Với các bộ được đặt tên, bạn không phải sử dụng các chỉ số nguyên để truy cập các thành viên của một bộ.
Ví dụ :
Mã 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
Tiến sĩ John Wesley có một bảng tính chứa danh sách ID, Điểm, lớp và tên của học sinh.
Nhiệm vụ của bạn là giúp Tiến sĩ Wesley tính điểm trung bình của các sinh viên.

Ghi chú:
1. Các cột có thể theo thứ tự bất kỳ. ID, nhãn hiệu, lớp và tên có thể được viết theo bất kỳ thứ tự nào trong bảng tính.
2. Tên cột là ID, MARKS, LỚP và TÊN. (Cách viết và kiểu chữ hoa/thường của những tên này sẽ không thay đổi.)
Định dạng đầu vào :
Dòng đầu tiên chứa số nguyên N là tổng số học sinh.
Dòng thứ hai chứa tên của các cột theo thứ tự bất kỳ.
N dòng tiếp theo chứa các nhãn hiệu, ID, tên và lớp, bên dưới tên cột tương ứng của chúng.
Hạn chế :
- 0 <= N <= 100
In ra điểm trung bình cộng của danh sách đã sửa đến 2 chữ số thập phân.
Đầu vào mẫu:
THỬ NGHIỆM 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
THỬ NGHIỆM 01
78.00
81.00
THỬ NGHIỆM 01
Trung bình = (97 + 50 + 91 + 72 + 80)/5
Bạn có thể giải quyết thử thách này trong 4 dòng mã trở xuống không?
LƯU Ý: Không có hình phạt cho các giải pháp đúng nhưng có nhiều hơn 4 dòng.
Dung dịch
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)
