Bạn đã bao giờ cần lặp qua nhiều đoạn lặp song song khi viết mã bằng Python chưa? Trong hướng dẫn này, chúng tôi sẽ sử dụng hàm zip () của Python để thực hiện hiệu quả việc lặp song song trên nhiều lần lặp. Đây là những gì chúng ta sẽ đề cập trong bài đăng này: * Cách sử dụng Toán tử ‘in’ trong Python để Traverse
Bạn đang xem: hàm zip trong python 3
Bạn đã bao giờ cần lặp qua nhiều vòng lặp song song khi viết mã bằng Python chưa?
Trong hướng dẫn này, chúng tôi sẽ sử dụng hàm zip ()
của Python để thực hiện hiệu quả việc lặp song song trên nhiều iterables.
Đây là những gì chúng tôi sẽ đề cập trong bài đăng này:
Cách Sử dụng Toán tử ‘in’ trong Python để Traverse Lặp lại
Trước khi chúng ta hãy tiếp tục và tìm hiểu về hàm zip ()
, hãy nhanh chóng xem lại cách chúng tôi sử dụng toán tử in
với vòng lặp for
để truy cập các mục trong một có thể lặp lại (danh sách, bộ giá trị, từ điển, chuỗi, v.v.). Đoạn mã bên dưới hiển thị cú pháp chung:
cho mục trong danh sách_1:
# làm gì đó trên mục
Nói một cách đơn giản, chúng tôi nói với trình thông dịch Python: “Xin chào! Vui lòng lặp qua list_1
để truy cập từng mục mã> và thực hiện một số thao tác trên mỗi
mục
. "
Điều gì sẽ xảy ra nếu chúng ta có nhiều hơn một danh sách (hoặc bất kỳ danh sách nào có thể lặp lại)? Giả sử, danh sách N
- bạn có thể chèn số yêu thích của mình vào vị trí của N
. Mọi thứ hiện có vẻ hơi khó khăn và cách tiếp cận sau sẽ không hoạt động:
# Ví dụ - 2 danh sách, danh sách_1 và danh sách_2
cho i1 trong danh sách_1:
cho i2 trong danh sách_2:
# làm gì đó trên i1 và i2
Xin lưu ý rằng đoạn mã trên:
- lần đầu tiên chạm vào mục đầu tiên trong
list_1
, - sau đó lặp qua
list_2
để truy cập từng mục tronglist_2
, - sau đó truy cập vào mục thứ hai trong
list_1 < / code>,
- và lặp lại toàn bộ
list_2
và - thực hiện điều này cho đến khi nó đi qua toàn bộ
list_1 code >
Rõ ràng, đây không phải là điều chúng tôi muốn. Chúng tôi cần có thể truy cập các mục tại một chỉ mục cụ thể từ cả hai danh sách. Đây chính xác là những gì được gọi là lặp lại song song.
Tại sao lại sử dụng đối tượng range () của Python Luôn luôn không phải là Lựa chọn Tối ưu
Bạn có thể nghĩ đến việc sử dụng đối tượng range ()
với vòng lặp for
. "Nếu tôi biết rằng tất cả các danh sách đều có cùng số lượng mục, tôi có thể không chỉ sử dụng index
để khai thác vào từng danh sách đó và kéo ra mục tại index code>? "
Chà, hãy thử xem. Đoạn mã nằm trong đoạn mã dưới đây. Bạn biết rằng tất cả các danh sách - list_1
, list_2
, ..., list_N
- chứa cùng một số mục. Và bạn tạo một đối tượng range ()
như hình bên dưới và sử dụng chỉ mục i
để truy cập mục ở vị trí i
trong mỗi mục trong số các mục.
cho tôi trong phạm vi (len (list_1)):
# làm điều gì đó trên list_1 [i], list_2 [i], list_3 [i], ..., list_N [i]
Như bạn có thể đoán bây giờ, điều này hoạt động như mong đợi chỉ khi tất cả các vòng lặp chứa cùng một số lượng mục.
Hãy xem xét trường hợp một hoặc nhiều danh sách được cập nhật - giả sử, một danh sách có thể có một mục bị xóa khỏi danh sách và một danh sách khác có thể có một mục được thêm vào. Điều này sẽ gây nhầm lẫn:
- Bạn có thể gặp phải
IndexErrors
khi bạn đang truy cập các mục tại các chỉ mục không còn hợp lệ vì mục trong chỉ mục đã bị xóa, hoặc - Bạn có thể hoàn toàn không truy cập vào các mục mới được thêm vì chúng đang ở các chỉ mục hiện không nằm trong phạm vi chỉ số được truy cập.
Bây giờ, hãy xem cách Python sử dụng
Hàm zip () của Python hoạt động như thế nào
Hãy bắt đầu bằng cách tìm kiếm tài liệu cho zip ()
và phân tích cú pháp nó trong các phần tiếp theo.
Cú pháp : zip (* iterables)
- zip ()
nhận một hoặc nhiều đoạn lặp làm đối số.
Tạo một trình lặp để tổng hợp các phần tử từ mỗi đoạn lặp.
1. Trả về một trình lặp các bộ giá trị, trong đó bộ giá trị thứ i chứa phần tử thứ i từ mỗi chuỗi đối số hoặc chuỗi lặp.
2. Trình lặp dừng khi đầu vào ngắn nhất có thể lặp lại đã hết.
3. Với một đối số có thể lặp lại duy nhất, nó trả về một trình lặp gồm 1 bộ giá trị.
4. Không có đối số, nó trả về một trình lặp trống. - Python Docs
Cách hàm zip () tạo một Iterator of Tuples
minh họa sau đây giúp chúng tôi hiểu cách hoạt động của hàm zip ()
bằng cách tạo một trình lặp các bộ giá trị từ hai danh sách đầu vào, L1
và L2
. Kết quả của việc gọi zip ()
trên các tệp lặp được hiển thị ở bên phải.
- Lưu ý cách tuple đầu tiên (tại chỉ mục
0 mã>) ở bên phải chứa 2 mục, tại chỉ mục
0
trongL1
vàL2
, tương ứng. - Mục thứ hai tuple (tại chỉ mục
1
) chứa các mục tại chỉ mục1
trongL1
vàL2
.
< li> Nói chung, bộ tại chỉ mục i
chứa các mục tại chỉ mục i
trong L1
và L2
. li>
Hãy thử một vài ví dụ trong phần tiếp theo.
Cách sử dụng hàm zip () của Python - Hãy tự mình thử!
Hãy thử chạy các ví dụ sau trong IDE yêu thích của bạn.
Ví dụ đầu tiên, chúng ta hãy chọn hai danh sách L1
và L2
chứa 5 mục s mỗi. Hãy gọi hàm zip ()
và chuyển vào ngôn ngữ L1
và L2
.
L1 = [1,2,3,4,5]
L2 = ['a', 'b', 'c', 'd', 'e']
zip_L1L2 = zip (L1, L2)
in (zip_L1L2)
# Đầu ra mẫu
& lt; zip đối tượng tại 0x7f92f44d5550 & gt;
Hãy truyền đối tượng zip vào danh sách và in nó ra, như được hiển thị bên dưới.
print (list (zip_L1L2 ))
# Đầu ra
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]
< h3 id = "what-going-when-the-iterables-are-of-other-lengths"> Điều gì sẽ xảy ra khi các Đoạn lặp có độ dài Khác nhau?
Nếu bạn quay lại tài liệu, điều thứ hai mục trong danh sách được đánh số có nội dung: "Trình vòng lặp dừng khi đầu vào ngắn nhất có thể lặp lại hết."
Không giống như làm việc với đối tượng range ()
, việc sử dụng zip ()
không gây ra lỗi khi tất cả các mục có thể có độ dài khác nhau. Hãy xác minh điều này như được hiển thị bên dưới.
Hãy xóa 'e'
khỏi L2
và lặp lại các bước ở trên.
< code class = "language-Python"> L1 = [1,2,3,4,5] L2 = ['a', 'b', 'c', 'd'] zip_L1L2 = zip (L1, L2) in (danh sách (zip_L1L2)) # Đầu ra [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
Bây giờ chúng ta thấy rằng đầu ra danh sách chỉ chứa 4 bộ giá trị và mục 5
từ L1
chưa được sử dụng. Càng xa càng tốt!
Điều gì sẽ xảy ra khi bạn chuyển một lần hoặc không lặp lại Hàm zip ()?
Hãy truy cập lại mục 3 và 4 của tài liệu.
"Với một đối số có thể lặp lại, nó trả về một trình lặp gồm 1-tuples.
Không có đối số, nó trả về một trình lặp trống. "
Hãy tiếp tục và xác minh điều này. Hãy quan sát cách chúng tôi nhận được 1 bộ giá trị khi chỉ nhập L1
trong đoạn mã bên dưới:
L1 = [1,2, 3,4,5]
zip_L1 = zip (L1)
in (danh sách (zip_L1))
# Đầu ra
[(1,), (2,), (3,), (4,), (5,)]
Khi chúng tôi gọi hàm zip ()
mà không có đối số, chúng tôi nhận được một danh sách trống, như được hiển thị bên dưới:
zip_None = zip ()
print (list (zip_None))
# Đầu ra
[]
Bây giờ hãy tạo một ví dụ trực quan hơn. Đoạn mã bên dưới cho thấy cách chúng tôi có thể sử dụng zip ()
để nén 3 danh sách lại với nhau và thực hiện các thao tác có ý nghĩa.
Với danh sách các loại trái cây, giá cả và số lượng bạn đã mua, tổng số tiền chi tiêu cho mỗi mặt hàng sẽ được in ra.
trái cây = ["táo", "cam", "chuối", "dưa"]
giá = [20,10,5,15]
số lượng = [5,7,3,4]
cho trái cây, giá cả, số lượng trong zip (trái cây, giá cả, số lượng):
print (f "Bạn đã mua {số lượng} {trái cây} với giá $ {price * số lượng}")
# Đầu ra
Bạn đã mua 5 quả táo với giá 100 đô la
Bạn đã mua 7 quả cam với giá 70 đô la
Bạn đã mua 3 quả chuối với giá 15 đô la
Bạn đã mua 4 quả dưa với giá 60 đô la
Bây giờ chúng ta đã hiểu cách hoạt động của hàm zip ()
và chúng ta biết hạn chế của nó là trình lặp sẽ dừng khi hết vòng lặp ngắn nhất. Vì vậy, hãy xem cách chúng ta có thể khắc phục hạn chế này bằng cách sử dụng hàm zip_longest ()
trong Python.
Cách sử dụng hàm zip_longest () trong Python
Hãy nhập hàm zip_longest ()
từ mô-đun itertools
:
từ itertools nhập zip_longest
Bây giờ, hãy thử một ví dụ trước đó về L2
chứa một mục nhỏ hơn L1
. < / p>
L1 = [1,2,3,4,5]
L2 = ['a', 'b', 'c', 'd']
zipL_L1L2 = zip_longest (L1, L2)
in (danh sách (zipL_L1L2))
# Đầu ra
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, None)]
Lưu ý rằng mục 5
từ L1
vẫn được bao gồm. Nhưng vì không có mục nào phù hợp trong L2
, nên phần tử thứ hai trong bộ cuối cùng là None
.
Bạn có thể tùy chỉnh nó nhiều hơn nếu bạn muốn. Ví dụ: bạn có thể thay thế Không có
bằng một thuật ngữ chỉ rõ hơn như Empty
, Item Not Found
, v.v. Tất cả những gì bạn phải làm là đặt đối số fillvalue
tùy chọn thành thuật ngữ mà bạn muốn hiển thị khi không có mục phù hợp nào trong một tệp có thể lặp lại khi bạn gọi zip_longest ()
. p>
Tôi hy vọng bây giờ bạn đã hiểu các hàm zip ()
và zip_longest ()
của Python.
Cảm ơn bạn đã đọc! Hẹn gặp lại tất cả các bạn trong một bài viết khác.
Xem thêm những thông tin liên quan đến chủ đề hàm zip trong python 3
List Comprehension, Hàm zip() & Mảng 2 Chiều | Lập Trình Python Cơ Bản #8
- Tác giả: CodeXplore
- Ngày đăng: 2020-08-24
- Đánh giá: 4 ⭐ ( 6922 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Hello Diu Túp, hôm nay chúng mình sẽ cùng tìm hiểu List và Các Hàm Xử Lý List Trong Python nhé các bạn 🤩 !
GitHub Repo trong Video (Files bắt đầu vs 7):
https://github.com/CodexploreRepo/Python_Basics_Tutorial[0:00] Overview Nội Dung trong Video này 👋 👋
[1:40] Hướng Dẫn Cài Đặt Visual Studio Code cho Lập Trình Python
Step 1: Hướng Dẫn Cài Đặt Visual Studio Code
Link: https://youtu.be/QQ_NmIJjg_A
Step 2: Hướng Dẫn Cài Đặt Python Interpreter (Trình Thông Dịch Python)
Link: https://youtu.be/nNrpyymspzM
[1:50] Cách sử dụng List Comprehension trong Python
[8:00] Các Hàm Nâng Cao: list, sum, zip
[17:35] 2D Array/List - Mảng 2 Chiều------------- ✪ About CodeXplore Channel ✪ ------------
CodeXplore là một platform chia sẻ kiến thức về Lập Trình [Coding] dành cho các bạn trẻ Việt Nam từ một cựu du học sinh Sing, hiện đang sống và làm việc tại Singapore.Channel của mình sẽ focus vào các chủ đề sau:
► [Code] Full-Stack Web Development (HTML, CSS, JavaScript, Node JS và React JS) ☞ Future Projects: Deno
► [Code] Coding (Python & JavaScript) Interview Preparation (Cấu Trúc Dữ Liệu và Thuật Toán & LeetCode Solutions)► [Xplore] Travel Vlog (Chia sẻ kinh nghiệm đi du lịch và trải nghiệm)
------------------
✪ Business inquiries: codexplore.channel@gmail.com
✪ Subscribe: https://bit.ly/youtube_codexplore➥ CodeXplore Social Links:
Fanpage: https://www.facebook.com/CodeXplore.dev/
Instagram: https://www.instagram.com/codexplore.dev/
GitHub: https://github.com/CodexploreRepo----------------------------------------------/-------------
© Bản quyền thuộc về CodeXplore
© Copyright by CodeXplore ☞ Do not ReupListComprehension HàmZip Mảng2Chiều
Chi tiết bài học 21.Nén tệp zip trong python
- Tác giả: vimentor.com
- Đánh giá: 5 ⭐ ( 3656 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Vimentor chi tiết bài học Tệp ZIP trong Python với Ví dụ
Cách sử dụng hàm Zip trong Python
- Tác giả: vi.softoban.com
- Đánh giá: 5 ⭐ ( 9622 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Hàm zip có sẵn trong thư viện mô-đun chuẩn của Python, nó giúp tổ chức mã và giữ cho mã sạch bằng cách loại bỏ các câu lệnh lặp lại và dài dòng không cần thiết
Hàm zip() trong Python
- Tác giả: 1ty.vn
- Đánh giá: 4 ⭐ ( 8857 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Hàm zip() trong Python trả về một đối tượng zip, là một iterator dạng danh sách các tuple kết hợp các phần tử từ các iterator (được tạo thành từ các iterable) khác.
Hàm, biến, kiểu dữ liệu trong Python
- Tác giả: phannhatchanh.com
- Đánh giá: 4 ⭐ ( 4302 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Trong python, có rất nhiều các hàm được tích hợp sẵn. Một số hàm tích hợp sẵn trong python được sử dụng phổ biến nhất như sau: print() , le…
Subprocess trong Python và gọi một lệnh hoặc ứng dụng khác từ Python
- Tác giả: laptrinhcanban.com
- Đánh giá: 4 ⭐ ( 8085 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Hướng dẫn sử dụng module subprocess trong Python để gọi một lệnh hoặc ứng dụng khác từ Python. Bạn cũng sẽ học được cách dùng subprocess.run() và subprocess.Popen() trong module subprocess để xử lý đồ
Hàm zip () trong Python 3
- Tác giả: vi.libertychildrenbelize.org
- Đánh giá: 4 ⭐ ( 9588 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Tôi biết cách sử dụng hàm zip () trong Python 3. Câu hỏi của tôi liên quan đến vấn đề sau mà tôi cảm thấy khá kỳ lạ: Tôi xác định hai danh sách: lis1 = [0, 1, 2, 3] lis2 = [4, 5, 6, 7] và tôi chúng tôi ...
Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình