ZIP và giải nén trong Python là gì?

Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để giải nén hoặc giải nén một, nhiều hoặc tất cả các tệp từ kho lưu trữ zip sang thư mục hiện tại hoặc thư mục khác

Trong mô-đun zipfile của Python, lớp ZipFile cung cấp một hàm thành viên để trích xuất một tệp từ Tệp ZIP,

Hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python tạo một trình lặp sẽ tổng hợp các phần tử từ hai hoặc nhiều lần lặp. Bạn có thể sử dụng trình vòng lặp kết quả để giải quyết các vấn đề lập trình phổ biến một cách nhanh chóng và nhất quán, chẳng hạn như tạo từ điển. Trong hướng dẫn này, bạn sẽ khám phá logic đằng sau hàm
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python và cách bạn có thể sử dụng nó để giải quyết các vấn đề trong thế giới thực

Đến cuối hướng dẫn này, bạn sẽ học

  • Cách thức hoạt động của
    >>> s1 = {2, 3, 1}
    >>> s2 = {'b', 'a', 'c'}
    >>> list(zip(s1, s2))
    [(1, 'a'), (2, 'c'), (3, 'b')]
    
    5 trong cả Python 3 và Python 2
  • Cách sử dụng hàm
    >>> s1 = {2, 3, 1}
    >>> s2 = {'b', 'a', 'c'}
    >>> list(zip(s1, s2))
    [(1, 'a'), (2, 'c'), (3, 'b')]
    
    5 của Python để lặp song song
  • Cách tạo từ điển nhanh chóng bằng cách sử dụng
    >>> s1 = {2, 3, 1}
    >>> s2 = {'b', 'a', 'c'}
    >>> list(zip(s1, s2))
    [(1, 'a'), (2, 'c'), (3, 'b')]
    
    5

Tiền thưởng miễn phí. 5 Suy nghĩ về Làm chủ Python, một khóa học miễn phí dành cho các nhà phát triển Python cho bạn thấy lộ trình và tư duy mà bạn sẽ cần để đưa các kỹ năng Python của mình lên một tầm cao mới

Tìm hiểu Hàm >>> s1 = {2, 3, 1} >>> s2 = {'b', 'a', 'c'} >>> list(zip(s1, s2)) [(1, 'a'), (2, 'c'), (3, 'b')] 5 của Python

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 có sẵn trong không gian tên tích hợp. Nếu bạn sử dụng
>>> zipped = zip()
>>> zipped
<zip object at 0x7f196294a488>
>>> list(zipped)
[]
2 để kiểm tra
>>> zipped = zip()
>>> zipped
<zip object at 0x7f196294a488>
>>> list(zipped)
[]
3, thì bạn sẽ thấy
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 ở cuối danh sách

>>>

>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', ..., 'zip']

Bạn có thể thấy rằng

>>> zipped = zip()
>>> zipped
<zip object at 0x7f196294a488>
>>> list(zipped)
[]
5 là mục cuối cùng trong danh sách các đối tượng có sẵn

Theo , hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python hoạt động như sau

Trả về một bộ lặp của các bộ, trong đó bộ thứ i chứa phần tử thứ i từ mỗi chuỗi đối số hoặc bộ lặp. Trình vòng lặp dừng khi hết vòng lặp đầu vào ngắn nhất. 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ộ. Không có đối số, nó trả về một trình vòng lặp trống. ()

Bạn sẽ giải nén định nghĩa này trong suốt phần còn lại của hướng dẫn. Khi bạn xem qua các ví dụ về mã, bạn sẽ thấy rằng các hoạt động của khóa kéo trong Python hoạt động giống như khóa kéo vật lý trên một chiếc túi hoặc một chiếc quần jean. Các cặp răng lồng vào nhau ở cả hai bên của khóa kéo được kéo lại với nhau để đóng lỗ. Trên thực tế, sự tương tự trực quan này là hoàn hảo để hiểu

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5, vì chức năng này được đặt tên theo các dây kéo vật lý

Loại bỏ các quảng cáo

Sử dụng >>> s1 = {2, 3, 1} >>> s2 = {'b', 'a', 'c'} >>> list(zip(s1, s2)) [(1, 'a'), (2, 'c'), (3, 'b')] 5 trong Python

Hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python được định nghĩa là
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
0. Hàm nhận làm đối số và trả về một trình vòng lặp. Trình lặp này tạo ra một loạt các bộ chứa các phần tử từ mỗi lần lặp.
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 có thể chấp nhận bất kỳ loại lặp nào, chẳng hạn như tệp, danh sách, bộ dữ liệu, từ điển, bộ, v.v.

Thông qua đối số >>> zipped = zip() >>> next(zipped) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration 2

Nếu bạn sử dụng

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 với các đối số
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
2, thì hàm sẽ trả về một trình vòng lặp tạo ra các bộ có độ dài
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
2. Để thấy điều này đang hoạt động, hãy xem khối mã sau

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]

Ở đây, bạn sử dụng

>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
6 để tạo một trình vòng lặp tạo ra các bộ dữ liệu có dạng
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
7. Trong trường hợp này, các giá trị
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
8 được lấy từ
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
9 và các giá trị
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
0 được lấy từ
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
1. Lưu ý cách hàm Python
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 trả về một trình vòng lặp. Để truy xuất đối tượng danh sách cuối cùng, bạn cần sử dụng
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
3 để sử dụng trình vòng lặp

Nếu bạn đang làm việc với các chuỗi như danh sách, bộ dữ liệu hoặc chuỗi, thì các lần lặp của bạn được đảm bảo sẽ được đánh giá từ trái sang phải. Điều này có nghĩa là danh sách các bộ kết quả sẽ có dạng

>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
4. Tuy nhiên, đối với các loại lần lặp khác (như bộ), bạn có thể thấy một số kết quả kỳ lạ

>>>

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]

Trong ví dụ này,

>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
5 và
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
6 là các đối tượng
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
7, không giữ các phần tử của chúng theo bất kỳ thứ tự cụ thể nào. Điều này có nghĩa là các bộ dữ liệu được trả về bởi
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 sẽ có các phần tử được ghép nối ngẫu nhiên. Nếu bạn định sử dụng hàm
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python với các lần lặp không có thứ tự như bộ, thì đây là điều cần lưu ý

Vượt qua không có đối số

Bạn cũng có thể gọi

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 mà không có đối số. Trong trường hợp này, bạn sẽ chỉ nhận được một trình vòng lặp trống

>>>

>>> zipped = zip()
>>> zipped
<zip object at 0x7f196294a488>
>>> list(zipped)
[]

Ở đây, bạn gọi

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 mà không có đối số, vì vậy biến
>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
2 của bạn chứa một trình vòng lặp trống. Nếu bạn sử dụng iterator với
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
3, thì bạn cũng sẽ thấy một danh sách trống

Bạn cũng có thể thử buộc trình vòng lặp trống trực tiếp tạo ra một phần tử. Trong trường hợp này, bạn sẽ nhận được một ngoại lệ

>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
4

>>>

>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Khi bạn gọi vào

>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
2, Python sẽ cố truy xuất mục tiếp theo. Tuy nhiên, vì
>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
2 chứa một trình vòng lặp trống, nên không có gì để rút ra, vì vậy Python đưa ra một ngoại lệ
>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
4

Vượt qua một đối số

Hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python cũng có thể nhận một đối số. Kết quả sẽ là một trình lặp tạo ra một loạt các bộ dữ liệu 1 mục

>>>

>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]

Điều này có thể không hữu ích, nhưng nó vẫn hoạt động. Có lẽ bạn có thể tìm thấy một số trường hợp sử dụng cho hành vi này của

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5

Như bạn có thể thấy, bạn có thể gọi hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python với bao nhiêu lần lặp đầu vào tùy thích. Độ dài của các bộ kết quả sẽ luôn bằng số lần lặp mà bạn chuyển làm đối số. Đây là một ví dụ với ba lần lặp

>>>

>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]

Ở đây, bạn gọi hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python với ba lần lặp, do đó, các bộ kết quả có ba phần tử mỗi bộ

Loại bỏ các quảng cáo

Vượt qua các đối số có độ dài không bằng nhau

Khi bạn đang làm việc với hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python, điều quan trọng là phải chú ý đến độ dài của các lần lặp của bạn. Có thể các lần lặp mà bạn chuyển vào dưới dạng đối số không có cùng độ dài

Trong những trường hợp này, số lượng phần tử mà

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 đưa ra sẽ bằng độ dài của lần lặp ngắn nhất. Các phần tử còn lại trong bất kỳ lần lặp nào dài hơn sẽ bị
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 bỏ qua hoàn toàn, như bạn có thể thấy tại đây

>>>

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
6 là độ dài của đối tượng
>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
7 đầu tiên (và ngắn nhất), nên
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 xuất ra một danh sách gồm năm bộ dữ liệu. Vẫn còn 95 phần tử chưa khớp từ đối tượng thứ hai
>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
7. Tất cả những thứ này đều bị
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 bỏ qua vì không còn phần tử nào từ đối tượng
>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
7 đầu tiên để hoàn thành các cặp

Nếu các giá trị theo sau hoặc không khớp là quan trọng đối với bạn, thì bạn có thể sử dụng thay vì

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5. Với hàm này, các giá trị bị thiếu sẽ được thay thế bằng bất kỳ giá trị nào bạn chuyển đến đối số
>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]
4 (mặc định là
>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]
5). Lặp lại sẽ tiếp tục cho đến khi hết lần lặp dài nhất

>>>

>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]

Ở đây, bạn sử dụng

>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]
2 để tạo ra năm bộ dữ liệu với các phần tử từ
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
1,
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
9 và
>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]
9. Quá trình lặp chỉ dừng lại khi hết
>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]
9. Các yếu tố còn thiếu từ
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
9 và
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
1 được điền bằng dấu chấm hỏi
>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
3, đó là những gì bạn đã chỉ định với
>>> from itertools import zip_longest
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> longest = range(5)
>>> zipped = zip_longest(numbers, letters, longest, fillvalue='?')
>>> list(zipped)
[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2), ('?', '?', 3), ('?', '?', 4)]
4

Kể từ Python 3. 10,

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 có một đối số từ khóa tùy chọn mới được gọi là , được giới thiệu thông qua PEP 618—Thêm kiểm tra độ dài tùy chọn vào zip. Mục tiêu chính của đối số này là cung cấp một cách an toàn để xử lý các lần lặp có độ dài không bằng nhau

Giá trị mặc định của

>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
6 là
>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
8, điều này đảm bảo rằng
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 vẫn tương thích ngược và có hành vi mặc định phù hợp với hành vi của nó trong các phiên bản Python 3 cũ hơn

>>>

>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

Trong Python >= 3. 10, gọi

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 mà không thay đổi giá trị mặc định thành
>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
6 vẫn cung cấp cho bạn danh sách năm bộ dữ liệu, với các phần tử chưa khớp từ đối tượng thứ hai
>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
7 bị bỏ qua

Ngoài ra, nếu bạn đặt

>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
6 thành
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
04, thì
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 sẽ kiểm tra xem các lần lặp đầu vào mà bạn cung cấp làm đối số có cùng độ dài hay không, tăng a nếu chúng không

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
0

Tính năng mới này của

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 rất hữu ích khi bạn cần đảm bảo rằng hàm chỉ chấp nhận các lần lặp có độ dài bằng nhau. Đặt
>>> # Python >= 3.10

>>> list(zip(range(5), range(100)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
6 thành
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
04 làm cho mã mong đợi các lần lặp có độ dài bằng nhau an toàn hơn, đảm bảo rằng các thay đổi bị lỗi đối với mã người gọi không dẫn đến mất dữ liệu một cách thầm lặng

So sánh >>> s1 = {2, 3, 1} >>> s2 = {'b', 'a', 'c'} >>> list(zip(s1, s2)) [(1, 'a'), (2, 'c'), (3, 'b')] 5 trong Python 3 và 2

Hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python hoạt động khác nhau trong cả hai phiên bản của ngôn ngữ. Trong Python 2,
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 trả về một
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
13 bộ dữ liệu. Kết quả
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
13 bị cắt bớt theo độ dài của đầu vào ngắn nhất có thể lặp lại. Nếu bạn gọi
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 mà không có đối số, thì bạn sẽ nhận được một số trống
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
13

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
1

Trong trường hợp này, lệnh gọi hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python trả về một danh sách các bộ dữ liệu bị cắt bớt ở giá trị
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
18. Khi bạn gọi
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 mà không có đối số, bạn sẽ nhận được một số trống
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
13

Tuy nhiên, trong Python 3,

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 trả về một trình vòng lặp. Đối tượng này tạo ra các bộ dữ liệu theo yêu cầu và chỉ có thể duyệt qua một lần. Quá trình lặp lại kết thúc với một ngoại lệ
>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
4 sau khi hết lần lặp đầu vào ngắn nhất. Nếu bạn không cung cấp đối số nào cho
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5, thì hàm sẽ trả về một trình vòng lặp trống

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
2

Tại đây, cuộc gọi của bạn tới ____0_______5 trả về một trình vòng lặp. Lần lặp đầu tiên bị cắt ngắn ở

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
18 và lần lặp thứ hai dẫn đến một ngoại lệ
>>> integers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> floats = [4.0, 5.0, 6.0]
>>> zipped = zip(integers, letters, floats)  # Three input iterables
>>> list(zipped)
[(1, 'a', 4.0), (2, 'b', 5.0), (3, 'c', 6.0)]
4. Trong Python 3, bạn cũng có thể mô phỏng hành vi của
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 trong Python 2 bằng cách gói trình vòng lặp được trả về trong một lệnh gọi tới
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
3. Điều này sẽ chạy qua iterator và trả về một danh sách các bộ dữ liệu

Nếu bạn thường xuyên sử dụng Python 2, hãy lưu ý rằng việc sử dụng

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 với các lần lặp đầu vào dài có thể vô tình tiêu tốn rất nhiều bộ nhớ. Trong những trường hợp này, hãy cân nhắc sử dụng
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
30 để thay thế. Hàm này tạo một iterator tổng hợp các phần tử từ mỗi iterables. Nó tạo ra hiệu ứng tương tự như
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 trong Python 3

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
3

Trong ví dụ này, bạn gọi

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
32 để tạo một iterator. Khi bạn sử dụng trình vòng lặp được trả về với
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
3, bạn sẽ nhận được một danh sách các bộ dữ liệu, giống như khi bạn đang sử dụng
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 trong Python 3. Quá trình lặp lại dừng khi hết lần lặp đầu vào ngắn nhất

Nếu bạn thực sự cần viết mã hoạt động theo cùng một cách trong cả Python 2 và Python 3, thì bạn có thể sử dụng một mẹo như sau

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
4

Tại đây, nếu

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
35 có sẵn trong
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
36, thì bạn sẽ biết rằng bạn đang sử dụng Python 2 và
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
35 sẽ được nhập bằng bí danh
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
38. Nếu không, chương trình của bạn sẽ tăng
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
39 và bạn sẽ biết rằng mình đang sử dụng Python 3. (Câu lệnh
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
40 ở đây chỉ là phần giữ chỗ. )

Với thủ thuật này, bạn có thể sử dụng hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python một cách an toàn trong toàn bộ mã của mình. Khi chạy, chương trình của bạn sẽ tự động chọn và sử dụng đúng phiên bản

Cho đến giờ, bạn đã tìm hiểu về cách thức hoạt động của hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python và tìm hiểu về một số tính năng quan trọng nhất của nó. Bây giờ là lúc bạn xắn tay áo lên và bắt đầu mã hóa các ví dụ thực tế

Loại bỏ các quảng cáo

Lặp lại nhiều lần lặp lại

Lặp lại nhiều lần lặp là một trong những trường hợp sử dụng phổ biến nhất cho hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python. Nếu bạn cần lặp qua nhiều danh sách, bộ dữ liệu hoặc bất kỳ trình tự nào khác, thì có khả năng bạn sẽ quay trở lại
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5. Phần này sẽ chỉ cho bạn cách sử dụng
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 để lặp qua nhiều lần lặp cùng một lúc

Duyệt danh sách song song

Hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python cho phép bạn lặp song song trên hai hoặc nhiều lần lặp. Vì
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 tạo ra các bộ dữ liệu, bạn có thể giải nén các bộ dữ liệu này trong tiêu đề của vòng lặp
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
48

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
5

Tại đây, bạn lặp qua một loạt các bộ được trả về bởi

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 và giải nén các phần tử thành
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
50 và
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
2. Khi bạn kết hợp các vòng lặp
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5,
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
48 và , bạn có thể nhận được một thành ngữ Pythonic hữu ích để duyệt qua hai hoặc nhiều lần lặp cùng một lúc

Bạn cũng có thể lặp qua nhiều hơn hai lần lặp trong một vòng lặp

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
48. Xem xét ví dụ sau, có ba lần lặp đầu vào

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
6

Trong ví dụ này, bạn sử dụng

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 với ba lần lặp để tạo và trả về một trình vòng lặp tạo bộ ba mục. Điều này cho phép bạn lặp qua cả ba lần lặp trong một lần. Không có hạn chế về số lần lặp mà bạn có thể sử dụng với hàm
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python

Ghi chú. Nếu bạn muốn tìm hiểu sâu hơn về các vòng lặp

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
48 của Python, hãy xem Python “for” Loops (Lặp lại xác định)

Tra từ điển song song

Trong Trăn 3. 6 và hơn thế nữa, từ điển là , nghĩa là chúng giữ các thành phần của chúng theo cùng thứ tự mà chúng được giới thiệu. Nếu bạn tận dụng tính năng này, thì bạn có thể sử dụng hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python để lặp qua nhiều từ điển một cách an toàn và mạch lạc

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
7

Ở đây, bạn lặp song song qua

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
59 và
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
60. Trong trường hợp này,
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 tạo ra các bộ dữ liệu với các mục từ cả hai từ điển. Sau đó, bạn có thể giải nén từng bộ và có quyền truy cập vào các mục của cả hai từ điển cùng một lúc

Ghi chú. Nếu bạn muốn tìm hiểu sâu hơn về phép lặp từ điển, hãy xem Cách lặp qua từ điển trong Python

Lưu ý rằng, trong ví dụ trên, thứ tự đánh giá từ trái sang phải được đảm bảo. Bạn cũng có thể sử dụng hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python để lặp song song qua các tập hợp. Tuy nhiên, bạn sẽ cần xem xét điều đó, không giống như từ điển trong Python 3. 6, các bộ không sắp xếp các phần tử của chúng theo thứ tự. Nếu bạn quên chi tiết này, kết quả cuối cùng của chương trình có thể không hoàn toàn như bạn muốn hoặc mong đợi

Giải nén một chuỗi

Có một câu hỏi thường xuyên xuất hiện trên các diễn đàn dành cho Pythonistas mới. “Nếu có một hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5, thì tại sao không có hàm
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
64 nào ngược lại?”

Lý do tại sao không có hàm

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
64 trong Python là vì đối lập của
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 là… à,
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5. Bạn có nhớ rằng hàm
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python hoạt động giống như một dây kéo thực sự không? . Vì vậy, làm thế nào để bạn giải nén các đối tượng Python?

Giả sử bạn có một danh sách các bộ và muốn tách các phần tử của mỗi bộ thành các chuỗi độc lập. Để làm điều này, bạn có thể sử dụng

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 cùng với , như vậy

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
8

Ở đây, bạn có một

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
13 bộ dữ liệu chứa một số loại dữ liệu hỗn hợp. Sau đó, bạn sử dụng toán tử giải nén
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
70 để giải nén dữ liệu, tạo hai danh sách khác nhau (
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
9 và
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
1)

Loại bỏ các quảng cáo

Sắp xếp song song

Sắp xếp là một thao tác phổ biến trong lập trình. Giả sử bạn muốn kết hợp hai danh sách và sắp xếp chúng cùng một lúc. Để làm điều này, bạn có thể sử dụng

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 cùng với
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
76 như sau

>>>

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
9

Trong ví dụ này, trước tiên bạn kết hợp hai danh sách với

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 và sắp xếp chúng. Lưu ý cách
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
78 được sắp xếp theo
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
1 và
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
80 được sắp xếp theo
>>> zipped = zip()
>>> next(zipped)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
9

Bạn cũng có thể sử dụng đồng thời

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
82 và
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 để đạt được kết quả tương tự

>>>

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
0

Trong trường hợp này,

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
82 chạy qua vòng lặp được tạo bởi
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 và sắp xếp các mục theo
>>> a = [1, 2, 3]
>>> zipped = zip(a)
>>> list(zipped)
[(1,), (2,), (3,)]
1, tất cả trong một lần. Cách tiếp cận này có thể nhanh hơn một chút vì bạn chỉ cần hai lệnh gọi hàm.
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 và
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
82

Với

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
82, bạn cũng đang viết một đoạn mã tổng quát hơn. Điều này sẽ cho phép bạn sắp xếp bất kỳ loại trình tự nào, không chỉ danh sách

Tính theo cặp

Bạn có thể sử dụng hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python để thực hiện một số phép tính nhanh. Giả sử bạn có dữ liệu sau trong bảng tính

Thành phần/ThángTháng GiêngTháng HaiTháng BaTổng doanh thu52.000. 0051,000. 0048.000. 00Chi phí sản xuất46,800. 0045.900. 0043,200. 00

Bạn sẽ sử dụng dữ liệu này để tính lợi nhuận hàng tháng của mình.

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 có thể cung cấp cho bạn một cách nhanh chóng để thực hiện các phép tính

>>>

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
1

Tại đây, bạn tính toán lợi nhuận cho mỗi tháng bằng cách trừ

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
92 từ
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
93. Hàm
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python kết hợp các cặp dữ liệu phù hợp để thực hiện các phép tính. Bạn có thể khái quát hóa logic này để thực hiện bất kỳ loại phép tính phức tạp nào với các cặp được trả về bởi
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5

xây dựng từ điển

Từ điển của Python là một cấu trúc dữ liệu rất hữu ích. Đôi khi, bạn có thể cần xây dựng một từ điển từ hai trình tự khác nhau nhưng có liên quan chặt chẽ với nhau. Một cách thuận tiện để đạt được điều này là sử dụng

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
96 và
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 cùng nhau. Ví dụ: giả sử bạn đã truy xuất dữ liệu của một người từ biểu mẫu hoặc cơ sở dữ liệu. Bây giờ bạn có các danh sách dữ liệu sau

>>>

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
2

Với dữ liệu này, bạn cần tạo từ điển để xử lý tiếp. Trong trường hợp này, bạn có thể sử dụng

>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
96 cùng với
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 như sau

>>>

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
3

Tại đây, bạn tạo một từ điển kết hợp hai danh sách.

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
00 trả về một trình vòng lặp tạo ra các bộ dữ liệu 2 mục. Nếu bạn gọi
>>> numbers = [1, 2, 3]
>>> letters = ['a', 'b', 'c']
>>> zipped = zip(numbers, letters)
>>> zipped  # Holds an iterator object
<zip object at 0x7fa4831153c8>
>>> type(zipped)
<class 'zip'>
>>> list(zipped)
[(1, 'a'), (2, 'b'), (3, 'c')]
96 trên iterator đó, thì bạn sẽ xây dựng từ điển bạn cần. Các phần tử của
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
02 trở thành các khóa của từ điển và các phần tử của
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
03 đại diện cho các giá trị trong từ điển

Bạn cũng có thể cập nhật từ điển hiện có bằng cách kết hợp

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 với
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
05. Giả sử John thay đổi công việc và bạn cần cập nhật từ điển. Bạn có thể làm một cái gì đó như sau

>>>

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
4

Tại đây,

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
05 cập nhật từ điển với bộ khóa-giá trị mà bạn đã tạo bằng cách sử dụng hàm
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python. Với kỹ thuật này, bạn có thể dễ dàng ghi đè lên giá trị của
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
08

Loại bỏ các quảng cáo

Phần kết luận

Trong hướng dẫn này, bạn đã học cách sử dụng hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python.
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 có thể nhận nhiều lần lặp làm đầu vào. Nó trả về một trình vòng lặp có thể tạo các bộ dữ liệu với các phần tử được ghép nối từ mỗi đối số. Trình lặp kết quả có thể khá hữu ích khi bạn cần xử lý nhiều lần lặp trong một vòng lặp và thực hiện một số hành động trên các mục của chúng cùng một lúc

Bây giờ bạn có thể

  • Sử dụng hàm
    >>> s1 = {2, 3, 1}
    >>> s2 = {'b', 'a', 'c'}
    >>> list(zip(s1, s2))
    [(1, 'a'), (2, 'c'), (3, 'b')]
    
    5 trong cả Python 3 và Python 2
  • Lặp lại nhiều lần lặp và thực hiện song song các hành động khác nhau trên các mục của chúng
  • Tạo và cập nhật từ điển một cách nhanh chóng bằng cách nén hai lần lặp đầu vào với nhau

Bạn cũng đã mã hóa một vài ví dụ mà bạn có thể sử dụng làm điểm bắt đầu để triển khai các giải pháp của riêng mình bằng cách sử dụng hàm

>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5 của Python. Vui lòng sửa đổi các ví dụ này khi bạn khám phá sâu hơn về
>>> s1 = {2, 3, 1}
>>> s2 = {'b', 'a', 'c'}
>>> list(zip(s1, s2))
[(1, 'a'), (2, 'c'), (3, 'b')]
5

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Phép lặp song song với hàm zip() của Python

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

ZIP và giải nén trong Python là gì?

Gửi cho tôi thủ thuật Python »

Giới thiệu về Leodanis Pozo Ramos

ZIP và giải nén trong Python là gì?
ZIP và giải nén trong Python là gì?

Leodanis là một kỹ sư công nghiệp yêu thích Python và phát triển phần mềm. Anh ấy là một nhà phát triển Python tự học với hơn 6 năm kinh nghiệm. Anh ấy là một nhà văn đam mê kỹ thuật với số lượng bài báo được xuất bản ngày càng tăng trên Real Python và các trang web khác

» Tìm hiểu thêm về Leodanis


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

ZIP và giải nén trong Python là gì?

Aldren

ZIP và giải nén trong Python là gì?

Geir Arne

ZIP và giải nén trong Python là gì?

Jaya

ZIP và giải nén trong Python là gì?

Joanna

ZIP và giải nén trong Python là gì?

Mike

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Giải nén trong Python là gì?

Giải nén có nghĩa là chuyển đổi các giá trị đã nén trở lại giá trị riêng lẻ như ban đầu . Điều này được thực hiện với sự trợ giúp của toán tử “*”. Vì vậy, bây giờ, nếu chúng tôi muốn đưa các giá trị cũ vào danh sách và danh sách từ danh sách đã nén zl, thì chúng tôi phải giải nén zl.

Sự khác biệt giữa zip và giải nén là gì?

Tệp nén (nén) chiếm ít dung lượng lưu trữ hơn và có thể được chuyển sang máy tính khác nhanh hơn so với tệp không nén . Trong Windows, bạn làm việc với các tệp và thư mục nén giống như cách bạn làm việc với các tệp và thư mục không nén.

Tệp ZIP trong Python là gì?

Tệp zip của Python là mô-đun thư viện chuẩn dùng để thao tác với các tệp ZIP . Định dạng tệp này là một tiêu chuẩn công nghiệp được áp dụng rộng rãi khi lưu trữ và nén dữ liệu kỹ thuật số. Bạn có thể sử dụng nó để đóng gói một số tệp liên quan lại với nhau.

Giải nén dùng để làm gì?

Giải nén là hành động giải nén các tệp từ một tệp được nén hoặc kho lưu trữ tệp tương tự . Nếu các tệp trong gói cũng được nén -- như thường lệ -- việc giải nén sẽ giải nén chúng.