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 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 trong list_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
  • thực hiện điều này cho đến khi nó đi qua toàn bộ list_1

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 ? "

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 zip () có thể giúp chúng ta lặp qua nhiều danh sách song song. Đọc trước để tìm hiểu.

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 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.

zipf

  • Lưu ý cách tuple đầu tiên (tại chỉ mục 0 ) ở bên phải chứa 2 mục, tại chỉ mục 0 trong L1 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ục 1 trong L1 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 L2 .

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 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 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 () .

Tôi hy vọng bây giờ bạn đã hiểu các hàm zip () 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

alt

  • 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 Reup

    ListComprehension 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

Xem Thêm  Làm cách nào để xóa một ký tự khỏi chuỗi trong JavaScript? - js xóa khỏi chuỗi

By ads_php