zip Lặp lại song song nhiều lần lặp, tạo ra các bộ dữ liệu với một mục từ mỗi bộ. Nếu một lần lặp ngắn hơn cái kia, nó sẽ chỉ dừng lại khi đạt đến phần tử cuối cùng của lần lặp ngắn nhất, cắt kết quả theo độ dài của lần lặp ngắn nhất
a = [1, 2, 3, 4]
b = ["one", "two", "three"]
for val1, val2 in zip[a, b]:
print[val1, val2]
1 one
2 two
3 three
animals = ["cat", "dog", "monkey"]
n = len[animals]
for i in range[n]:
animal = animals[i]
print[animal]
# output:
# cat
# dog
# monkey
4 với đối số animals = ["cat", "dog", "monkey"]
n = len[animals]
for i in range[n]:
animal = animals[i]
print[animal]
# output:
# cat
# dog
# monkey
5¶
Kể từ Python 3. 10, đối số
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey5 có thể được sử dụng và đặt thành True trong trường hợp các lần lặp được giả định là có độ dài bằng nhau. Nó làm tăng ValueError nếu đây không phải là trường hợp
Khả năng hiểu danh sách được sử dụng để thực hiện một số thao tác cho mọi phần tử hoặc chọn một tập hợp con các phần tử đáp ứng một điều kiện
Lớp phạm vi thường được sử dụng để lặp một số lần cụ thể trong vòng lặp
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey7 và nhận các đối số sauTênMô tả
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey8Một số nguyên đại diện cho phần đầu của phạm vi [mặc định là
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey9]
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey0Đi tới, nhưng không bao gồm số nguyên được cung cấp
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey1Dải ô sẽ bao gồm mọi N số từ
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey8 đến
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey0 [mặc định là
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey4]
Nếu bạn chỉ truyền một đối số duy nhất cho hàm tạo
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey50, thì nó được coi là giá trị cho tham số
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey0
Chúng ta cũng có thể sử dụng vòng lặp
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey7 để đạt được kết quả tương tự
Trên mỗi lần lặp của vòng lặp
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey7, chúng tôi nối thêm một danh sách trống vào danh sách hiện có
Chúng tôi đã sử dụng dấu gạch dưới
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey54 làm tên biến. Đây là quy ước cho các biến giữ chỗ mà chúng tôi không có ý định sử dụng
Bạn cũng có thể tạo nhiều danh sách trống riêng lẻ trong một dòng bằng cách chỉ định tên biến ở bên trái
Đảm bảo rằng các tên biến ở bên trái có số lượng chính xác bằng các giá trị ở bên phải
Chúng tôi đã sử dụng biểu thức trình tạo để lặp qua đối tượng
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey5
Trên mỗi lần lặp lại, chúng tôi trả về một danh sách trống, danh sách này được gán cho một biến
Một cách tiếp cận khác để xem xét là sử dụng từ điển có khóa danh sách
Chúng tôi đã sử dụng khả năng hiểu chính tả để lặp lại danh sách các khóa
Đọc chính tả rất giống với đọc danh sách
Họ thực hiện một số thao tác cho mọi cặp khóa-giá trị trong từ điển hoặc chọn một tập hợp con các cặp khóa-giá trị đáp ứng một điều kiện
Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực thi chương trình nói trên
Trình chỉnh sửa mã Python
Có một cách khác để giải quyết giải pháp này?
Trước. Viết chương trình Python để chia danh sách dựa trên ký tự đầu tiên của từ.
Tiếp theo. Viết chương trình Python để tìm các giá trị bị thiếu và bổ sung trong hai danh sách.
Mức độ khó của bài tập này là gì?
Dễ dàng trung bình khóKiểm tra kỹ năng Lập trình của bạn với bài kiểm tra của w3resource
con trăn. Lời khuyên trong ngày
Bạn có thể sử dụng ký tự gạch dưới ở bất cứ đâu trong tên biến
Điều này có nghĩa là, bất cứ nơi nào bạn muốn, bao nhiêu lần bạn muốn trong tên của một biến
a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works
Tôi không khuyến khích bạn sử dụng nó, nhưng trong trường hợp bạn thấy một cách đặt tên biến kỳ lạ như vậy, hãy biết rằng đó thực sự là một tên hợp lệ của một biến
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
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 ích 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 Python
Hã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, sau đó 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ó
animals = ["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 nên 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 Python
Cho đế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
1 one
2 two
3 three
0Mặ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 [yếu 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 [yếu 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
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ó
1 one
2 two
3 three
6Như 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 như cũ nếu chúng ta viết
1 one
2 two
3 three
00 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
a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works0
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 vào một
1 one
2 two
3 three
03 khi cố gắng lấy một phần tử từ danh sách ngắn hơna______b = "abcd" # this works _a_b_c_d = "abcd" # this also works2
Khi
1 one
2 two
3 three
04 là 3, 1 one
2 two
3 three
05 trở thành 1 one
2 two
3 three
06 và trả về phần tử 1 one
2 two
3 three
07. Tuy nhiên, trong cùng lần lặp đó, không có phần tử nào tồn tại cho 1 one
2 two
3 three
08. Điều này dẫn đến 1 one
2 two
3 three
03 đã thấy ở trênSử dụng chức năng zip để tự động lặp lại nhiều danh sách
Có 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
1 one
2 two
3 three
60. Đâ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
animals = ["cat", "dog", "monkey"] for animal in animals: print[animal] # output: # cat # dog # monkey0
Bằng cách sử dụng hàm
1 one
2 two
3 three
60, chúng ta không cần lo lắng về việc lưu trữ độ dài của danh sách trong một biến như 1 one
2 two
3 three
62 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 1 one
2 two
3 three
04. 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 1 one
2 two
3 three
60 và để Python lo các chi tiết. Ngoài ra, hãy lưu ý cách các biến 1 one
2 two
3 three
65 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 1 one
2 two
3 three
60 theo cùng một thứ tựBạn cũng có thể sử dụng hàm
1 one
2 two
3 three
60 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 1 one
2 two
3 three
60, 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 từng danh sáchanimals = ["cat", "dog", "monkey"] for animal in animals: print[animal] # output: # cat # dog # monkey9
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 Python
Cò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 đó
animals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey1
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
a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works00 để thay thế. Hàm này nằm trong module
a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works01 đ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 cho thấy, hàm
a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works00 hoạt động giống như hàm
1 one
2 two
3 three
60 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 độnganimals = ["cat", "dog", "monkey"] n = len[animals] for i in range[n]: animal = animals[i] print[animal] # output: # cat # dog # monkey6
Như bạn có thể thấy, mặc dù độ tuổi và lớp trong 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, nhưng 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
a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works06 để đị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_longest
Như chúng ta đã thấy, các hàm
1 one
2 two
3 three
60 và a______b = "abcd" # this works _a_b_c_d = "abcd" # this also works00 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
1 one
2 two
3 three
60 khi bạn muốn vòng lặp của mình dừng 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?