Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python: Truy xuất chỉ mục của giá trị lớn nhất trong danh sách

Thông qua chỉ mục (indexing), bạn có thể truy xuất một mục hoặc phạm vi mục từ danh sách. Bạn chỉ có thể truy xuất mục cụ thể nếu biết số chỉ mục liên kết với giá trị đó.

Để tìm chỉ mục của mục lớn nhất trong danh sách, bạn có thể dùng phương thức max() và index(). Hướng dẫn này đi qua chương trình truy xuất chỉ mục của phần tử tối đa trong danh sách.

Python: Truy xuất chỉ mục của giá trị lớn nhất trong danh sách

Viết chương trình truy xuất tên học sinh đạt điểm cao nhất bài kiểm tra toán cuối. Tên này sau đó in ra console.

Đầu tiên, tạo hai danh sách:

students = ["Andy", "April", "Julia", "Gary"]
grades = [75, 82, 64, 68]

Danh sách đầu tiên chứa tên học sinh. Danh sách thứ hai chứa điểm tương ứng.

Hai danh sách này là mảng song song (parallel arrays), nghĩa là cả hai mảng cùng kích thước và mỗi giá trị đại diện cho một phần của bản ghi. "students" chứa tên và "grades" chứa điểm của học sinh đó.

Tiếp theo, tìm điểm lớn nhất trong danh sách. Bạn có thể dùng hàm max() tìm điểm lớn nhất:

largest = max(grades)

Mã này truy xuất số lớn nhất. Điều này chưa lý tưởng. Bạn muốn truy xuất vị trí chỉ mục của số lớn nhất. Để làm điều đó, dùng hàm tích hợp sẵn khác: index(). Truy xuất chỉ mục của mục lớn nhất:

index_of_largest = grades.index(largest)

Vì hai danh sách song song, số chỉ mục của điểm cao nhất trong danh sách "grades" giống với chỉ mục của học sinh đạt điểm đó trong danh sách "students".

Tiếp theo, in thông báo ra console cho biết ai đạt điểm cao nhất:

print("{} earned the highest grade in the class. Their grade was {}.".format(students[index_of_largest], largest))

Sử dụng cú pháp chỉ mục để truy xuất tên học sinh đạt điểm cao nhất. Sau đó thêm giá trị này và điểm họ đạt vào chuỗi.

Chạy chương trình:

April earned the highest grade in the class. Their grade was 82.

Mã xác định thành công học sinh đạt điểm cao nhất. Để tìm chỉ mục của phần tử nhỏ nhất, bạn có thể thay max() bằng min().

Tìm nhiều chỉ mục bằng giá trị lớn nhất

Điều gì xảy ra nếu có hai học sinh cùng điểm cao nhất? Chương trình trên chỉ trả về chỉ mục của học sinh đầu tiên đạt điểm đó.

Để tìm tất cả các lần xuất hiện của học sinh đạt điểm cụ thể, bạn có thể dùng list comprehension. Bắt đầu bằng cách khởi tạo giá trị và truy xuất chỉ mục mục lớn nhất như trước:

students = ["Andy", "April", "Julia", "Gary", "Paul"]
grades = [75, 82, 64, 68, 82]
largest = max(grades)

Bạn đã thêm một bản ghi để xem điều gì xảy ra nếu hai học sinh cùng điểm.

Tiếp theo, viết list comprehension. List comprehension này tìm vị trí chỉ mục của tất cả học sinh đạt điểm cụ thể:

all_grades = [g for g, x in enumerate(grades) if x == largest]

Mã này lặp qua mọi điểm trong danh sách "grades". Mỗi điểm so sánh với giá trị lớn nhất trong "grades". Nếu giá trị bằng điểm cao nhất, nó được thêm vào danh sách.

Hàm enumerate() chia danh sách thành hai: số chỉ mục và giá trị. Do đó, "g" đại diện cho chỉ mục mục trong danh sách và "x" đại diện cho giá trị mục.

Tiếp theo, dùng vòng lặp for in thông báo cho mỗi học sinh có điểm bằng điểm cao nhất tìm được:

for g in all_grades:
    print("{} earned the highest grade in the class. Their grade was {}.".format(students[g], grades[g]))

Nếu nhiều học sinh đạt điểm cao nhất, vòng lặp for sẽ chạy nhiều lần. Mỗi lần chạy, tên học sinh in ra console với thông báo họ đạt điểm cao nhất.

Chạy chương trình:

April earned the highest grade in the class. Their grade was 82.
Paul earned the highest grade in the class. Their grade was 82.

Chương trình hiển thị thành công tên tất cả học sinh đạt điểm cao nhất.

Kết luận

Bạn có thể truy xuất chỉ mục của mục trong danh sách dùng index(). Kết hợp với phương thức min() hoặc max(), bạn có thể tìm chỉ mục của mục nhỏ nhất hoặc lớn nhất trong danh sách.

Bây giờ bạn đã có kiến thức truy xuất chỉ mục giá trị lớn nhất trong danh sách như chuyên gia Python!