Cách in hai danh sách cạnh nhau bằng Python
Tìm hiểu cách lặp qua nhiều danh sách cạnh nhau trong Python – mỗi lần một phần tử. Những kỹ thuật này sẽ hoạt động ngay cả khi danh sách có độ dài khác nhau Show
Vòng lặp qua danh sách là một trong những kỹ năng cơ bản nhất trong Python. Trong một số trường hợp, bạn có thể thấy mình phải lặp lại nhiều danh sách cạnh nhau, lấy một phần tử từ mỗi danh sách và thực hiện thao tác với nó. Nếu bạn là người mới sử dụng Python, thì không phải lúc nào bạn cũng rõ ràng về cách thực hiện điều đó hoặc những lưu ý và phương pháp hay nhất tồn tại cho tác vụ này Trong bài viết này, chúng ta sẽ tìm hiểu cách tốt nhất để lặp qua nhiều danh sách trong Python. Chúng ta sẽ bắt đầu với một vòng lặp for đơn giản, tìm hiểu cách lặp qua nhiều danh sách một cách “thủ công”, sau đó khám phá tính hữu dụng của các hàm zip và zip_longest. Bạn nên làm quen một chút với các trình tự như bộ dữ liệu và danh sách và có hiểu biết cơ bản về cách thức hoạt động của vòng lặp. Nếu bạn cần xem lại, hãy xem các bài viết được liên kết để biết một số gợi ý. Nếu không, hãy bắt đầu Vòng lặp qua danh sách trong PythonHãy tóm tắt lại cách lặp qua một danh sách trong Python. Cách đơn giản nhất là dùng vòng lặp for duyệt qua từng phần tử của danh sách. Đây là một ví dụ animals = ["cat", "dog", "monkey"] for animal in animals: print(animal) # output: # cat # dog # monkey Vòng lặp animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey0 đi qua từng con vật trong danh sách animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey1, đặt nó vào một biến gọi là động vật, rồi in ra Một khả năng khác là truy cập trực tiếp từng phần tử trong danh sách bằng cách sử dụng chỉ mục của nó. Thông thường, điều này liên quan đến việc tạo một dải số có độ dài bằng với danh sách (biến n trong ví dụ bên dưới), lặp qua dải đó, sau đó sử dụng từng số làm chỉ mục của từng thành phần trong danh sách Đây là giao diện của nó Có thể bạn quan tâmanimals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey Bất chấp sự khác biệt về cú pháp, lần lặp này mang lại kết quả chính xác như trước. Vì nó phức tạp hơn một chút, vòng lặp for animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey2 thường được ưu tiên hơn khi tất cả những gì bạn cần là lặp qua một danh sách Vòng lặp thủ công qua nhiều danh sách trong PythonCho đến nay, các vòng lặp đã đủ dễ dàng. Nhưng điều gì sẽ xảy ra nếu chúng ta có nhiều danh sách để lặp lại? Sự cố này xuất hiện khi chúng tôi có dữ liệu liên quan nhưng được lưu trữ trong các danh sách khác nhau. Ví dụ, xem xét hai danh sách dưới đây, animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey3 và animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey4 students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] Mặc dù chúng là các danh sách riêng biệt nhưng chúng có liên quan với nhau theo chỉ mục. animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey5 (phần tử đầu tiên trong danh sách animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey3) đạt điểm animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey7 (phần tử đầu tiên trong danh sách animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey4), Mary đạt điểm animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey9, v.v. Làm thế nào chúng ta có thể lặp lại cả hai danh sách và in ra từng học sinh cùng với điểm tương ứng của họ? Một giải pháp là sử dụng phép lặp dựa trên chỉ mục mà chúng tôi đã sử dụng trước đây. Nếu chúng ta sử dụng cùng một chỉ mục để lấy một phần tử từ mỗi danh sách, chúng ta sẽ nhận được cặp giá trị thích hợp. Đây là giao diện của nó students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.5 Như bạn có thể thấy, mỗi học sinh được in cùng với điểm của họ. Ngoài ra, lưu ý cách danh sách được sử dụng khi tính n không thực sự quan trọng. Nó sẽ hoạt động giống như vậy nếu chúng ta viết students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]0 thay vào đó Vấn đề với việc sử dụng các chỉ sốNhưng chờ đã – có một nhược điểm. Điều gì xảy ra nếu danh sách animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey3 và animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey4 không có cùng kích thước? Nếu danh sách ngắn hơn được cung cấp, thì vòng lặp sẽ kết thúc trước khi các phần tử bổ sung của danh sách dài hơn được truy cập. Trong ví dụ bên dưới, hãy lưu ý cách lớp cuối cùng không được truy cập students = ["John", "Mary"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 Mặt khác, nếu danh sách dài hơn được sử dụng để tính n, thì mã cuối cùng sẽ chạy thành students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]3 khi cố gắng lấy một phần tử từ danh sách ngắn hơn students = ["John", "Mary", "Luke", "Anna"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.5 # IndexError: list index out of range Khi students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]4 là 3, students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]5 trở thành students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]6 và trả về phần tử students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]7. Tuy nhiên, trong cùng lần lặp đó, không có phần tử nào tồn tại cho students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]8. Điều này dẫn đến students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]3 đã thấy ở trên Sử dụng chức năng zip để tự động lặp lại nhiều danh sáchCó một giải pháp thay thế đơn giản hơn nhiều để lặp qua nhiều danh sách trong Python. chức năng students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50. Đây là một chức năng tích hợp sẵn cho phép bạn lặp lại hai hoặc nhiều danh sách cạnh nhau. (Nếu bạn tò mò, chúng tôi có một khóa học đầy đủ về các chức năng tích hợp sẵn của Python sẵn sàng để bạn khám phá. ) So sánh ví dụ dưới đây với mã trước đây của chúng tôi và lưu ý rằng nó trông đơn giản và đẹp hơn nhiều students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] for student, grade in zip(students, grades): print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.5 Bằng cách sử dụng hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50, chúng ta không cần phải lo lắng về việc lưu trữ độ dài của danh sách trong một biến như students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.52 hoặc lấy các phần tử theo cách thủ công bằng cách sử dụng chỉ mục students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5]4. Chúng tôi chỉ cần đặt các danh sách mà chúng tôi muốn lặp lại vào hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50 và để Python lo các chi tiết. Ngoài ra, hãy lưu ý cách các biến students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.55 và lớp tham chiếu đến các phần tử bên trong mỗi danh sách được chuyển đến hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50 theo cùng một thứ tự Bạn cũng có thể sử dụng hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50 của Python để lặp lại nhiều hơn hai danh sách cạnh nhau. Đơn giản chỉ cần đặt tất cả chúng vào hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50, sau đó sử dụng cùng một số lượng biến trong vòng lặp for để lưu trữ các phần tử tương ứng của mỗi danh sách students = ["John", "Mary", "Luke"] ages = [12, 10, 13] grades = [9.0, 8.5, 7.5] for student, age, grade in zip(students, ages, grades): print(student, "is", age, "years old and got a grade of", grade) # output: # John is 12 years old and got a grade of 9.0 # Mary is 10 years old and got a grade of 8.5 # Luke is 13 years old and got a grade of 7.5 Sử dụng hàm zip_longest để tiếp cận tất cả các phần tử trong nhiều danh sách trong PythonCòn những danh sách có số lượng phần tử khác nhau trong mỗi danh sách thì sao? . Ví dụ, vòng lặp dưới đây chỉ thực hiện một lần vì danh sách sinh viên chỉ có một mục duy nhất trong đó students = ["John"] ages = [12, 10, 13] grades = [9.0, 8.5, 7.5] for student, age, grade in zip(students, ages, grades): print(student, "is", age, "years old and got a grade of", grade) # output: # John is 12 years old and got a grade of 9.0 Nếu bạn muốn truy cập tất cả các phần tử trong tất cả các danh sách, bạn có thể sử dụng hàm students = ["John", "Mary"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.50 để thay thế. Hàm này nằm trong module students = ["John", "Mary"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.51 đi kèm với thư viện chuẩn của Python nên chúng ta chỉ cần import là có thể sử dụng Như tên gợi ý, hàm students = ["John", "Mary"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.50 hoạt động giống như hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50 thông thường, nhưng nó tiếp cận tất cả các phần tử – ngay cả những phần tử trong danh sách dài nhất. Để làm điều đó, nó sẽ điền vào các giá trị trong danh sách ngắn hơn với giá trị mặc định. Đây là cách nó hoạt động from itertools import zip_longest students = ["John", "Mary", "Luke"] ages = [12, 10] grades = [9.0] for student, age, grade in zip_longest(students, ages, grades, fillvalue="??"): print(student, "is", age, "years old and got a grade of", grade) # output: # John is 12 years old and got a grade of 9.0 # Mary is 10 years old and got a grade of ?? # Luke is ?? years old and got a grade of ?? Như bạn có thể thấy, mặc dù độ tuổi và lớp của danh sách ngắn hơn animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey3, chúng tôi đã lặp lại trên tất cả các phần tử của animals = ["cat", "dog", "monkey"] n = len(animals) for i in range(n): animal = animals[i] print(animal) # output: # cat # dog # monkey3. Để làm được điều đó, các danh sách ngắn hơn được đệm bằng một “giá trị điền” trong vòng lặp. Theo mặc định, giá trị Không được sử dụng làm giá trị điền, nhưng ở đây chúng tôi đã sử dụng chuỗi students = ["John", "Mary"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.56 để có định dạng đẹp hơn. Khá tiện dụng Kết thúc các vòng lặp Python, zip và zip_longestNhư chúng ta đã thấy, các hàm students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50 và students = ["John", "Mary"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.50 thực sự hữu ích khi bạn cần lặp qua nhiều danh sách trong Python. Với các chức năng này, bạn không phải lo lắng về các chỉ số và kích thước danh sách và có thể tập trung vào chính quá trình lặp. Nhớ. sử dụng students = ["John", "Mary", "Luke"] grades = [9.0, 8.5, 7.5] n = len(students) for i in range(n): student = students[i] grade = grades[i] print(student, "got a grade of", grade) # output: # John got a grade of 9.0 # Mary got a grade of 8.5 # Luke got a grade of 7.50 khi bạn muốn vòng lặp của mình dừng lại sau khi hết danh sách ngắn nhất; Bây giờ bạn đã sẵn sàng lặp qua nhiều danh sách Python, bất kể số lượng hay độ dài của chúng. Nhưng đừng dừng việc học ở đây – bạn có thể xem Python cho Lộ trình khoa học dữ liệu của chúng tôi để nâng cao kỹ năng của bạn hơn nữa không? Làm cách nào để so sánh 2 danh sách trong Python?Bạn có thể sử dụng hàm map() của Python cùng với các công cụ funcool. hàm reduce() để so sánh các mục dữ liệu của hai danh sách. Khi bạn sử dụng chúng kết hợp, hàm map() sẽ áp dụng hàm đã cho cho mọi phần tử và hàm reduce() đảm bảo rằng nó áp dụng hàm theo cách liên tiếp.
Làm cách nào để kết hợp 2 danh sách thành 1 Python?Phương thức expand() của Python có thể được sử dụng để nối hai danh sách trong Python . Hàm extend() thực hiện lặp qua tham số đã truyền và do đó thêm mục vào danh sách, mở rộng danh sách theo kiểu tuyến tính. Tất cả các phần tử của list2 được thêm vào list1 và do đó list1 được cập nhật và cho kết quả là đầu ra. |