Mô-đun chuẩn hóa một tập hợp cốt lõi gồm các công cụ nhanh, hiệu quả về bộ nhớ, hữu ích khi sử dụng riêng lẻ hoặc kết hợp. Cùng với nhau, chúng tạo thành một “đại số lặp” để có thể xây dựng các công cụ chuyên dụng một cách ngắn gọn và hiệu quả bằng Python thuần túy
Chẳng hạn, SML cung cấp một công cụ lập bảng.
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element9 tạo ra chuỗi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element0. Hiệu ứng tương tự có thể đạt được trong Python bằng cách kết hợp
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element2 để tạo thành
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element3
Các công cụ này và các đối tác tích hợp của chúng cũng hoạt động tốt với các chức năng tốc độ cao trong mô-đun
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element4. Ví dụ, toán tử nhân có thể được ánh xạ qua hai vectơ để tạo thành tích vô hướng hiệu quả.
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element5
Trình vòng lặp vô hạn
Trình lặp
Tranh luận
Kết quả
Thí dụ
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element2
bắt đầu, [bước]
bắt đầu, bắt đầu+bước, bắt đầu+2*bước, …
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element7
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element8
p
p0, p1, … plast, p0, p1, …
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element9
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element10
phần tử [,n]
elem, elem, elem,… vô tận hoặc đến n lần
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element11
Trình lặp kết thúc trên chuỗi đầu vào ngắn nhất
Trình lặp
Tranh luận
Kết quả
Thí dụ
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element12
p [,func]
p0, p0+p1, p0+p1+p2, …
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14
p, q,…
p0, p1,… plast, q0, q1,…
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element15
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16
lặp đi lặp lại
p0, p1,… plast, q0, q1,…
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18
dữ liệu, bộ chọn
[d[0] nếu s[0]], [d[1] nếu s[1]], …
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element10
trước, tiếp theo
seq[n], seq[n+1], bắt đầu khi pred bị lỗi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element11
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element12
trước, tiếp theo
các phần tử của seq trong đó pred[elem] là sai
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14
có thể lặp lại [, phím]
trình vòng lặp phụ được nhóm theo giá trị của khóa [v]
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element15
tiếp theo, [bắt đầu,] dừng [, bước]
các phần tử từ seq[start. dừng lại. bươc]
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17
lặp đi lặp lại
[p[0], p[1]], [p[1], p[2]]
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19
chức năng, tiếp theo
func[*seq[0]], func[*seq[1]], …
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element10
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element11
trước, tiếp theo
seq[0], seq[1], cho đến khi pred thất bại
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element12
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13
nó, n
it1, it2, … itn chia một iterator thành n
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14
p, q,…
[p[0], q[0]], [p[1], q[1]], …
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element15
vòng lặp tổ hợp
Trình lặp
Tranh luận
Kết quả
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16
p, q, … [lặp lại=1]
sản phẩm cartesian, tương đương với vòng lặp for lồng nhau
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17
p[, r]
bộ có độ dài r, tất cả các thứ tự có thể, không có phần tử lặp lại
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18
tr, r
bộ có độ dài r, theo thứ tự được sắp xếp, không có phần tử lặp lại
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19
tr, r
bộ có độ dài r, theo thứ tự được sắp xếp, với các phần tử lặp lại
ví dụ
Kết quả
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element10
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element11
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element12
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element15
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17
Hàm itertool¶
Các chức năng mô-đun sau đây tất cả các trình vòng lặp xây dựng và trả về. Một số cung cấp luồng có độ dài vô hạn, vì vậy chúng chỉ nên được truy cập bằng các hàm hoặc vòng lặp cắt bớt luồng
itertools. tích lũy[có thể lặp lại[ , func, *, initial=None]]¶Tạo một trình lặp trả về tổng tích lũy hoặc kết quả tích lũy của các hàm nhị phân khác [được chỉ định thông qua đối số func tùy chọn]
Nếu func được cung cấp, nó phải là hàm của hai đối số. Các phần tử của đầu vào có thể lặp lại có thể là bất kỳ loại nào có thể được chấp nhận làm đối số cho func. [Ví dụ: với hoạt động mặc định của phép cộng, các phần tử có thể là bất kỳ loại có thể thêm nào bao gồm
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18 hoặc
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19. ]
Thông thường, số lượng phần tử đầu ra khớp với đầu vào có thể lặp lại. Tuy nhiên, nếu đối số từ khóa ban đầu được cung cấp, thì quá trình tích lũy sẽ dẫn đến giá trị ban đầu để đầu ra có nhiều phần tử hơn đầu vào có thể lặp lại
Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1
Có một số cách sử dụng đối số func. Nó có thể được đặt thành
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element20 cho mức tối thiểu đang chạy,
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element21 cho mức tối đa đang chạy hoặc
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element22 cho sản phẩm đang chạy. Bảng khấu hao có thể được xây dựng bằng cách tích lũy tiền lãi và áp dụng các khoản thanh toán
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element5
Xem
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element23 để biết một hàm tương tự chỉ trả về giá trị tích lũy cuối cùng
Mới trong phiên bản 3. 2
Đã thay đổi trong phiên bản 3. 3. Đã thêm tham số func tùy chọn.
Đã thay đổi trong phiên bản 3. 8. Đã thêm tham số ban đầu tùy chọn.
Tạo một trình lặp trả về các phần tử từ lần lặp đầu tiên cho đến khi hết, sau đó chuyển sang lần lặp tiếp theo, cho đến khi tất cả các lần lặp đã hết. Được sử dụng để coi các chuỗi liên tiếp là một chuỗi duy nhất. Gần tương đương với
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield elementphương thức lớp chuỗi. from_iterable[có thể lặp lại] ¶
Hàm tạo thay thế cho
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14. Nhận các đầu vào được xâu chuỗi từ một đối số có thể lặp lại duy nhất được đánh giá một cách lười biếng. Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield elementitertools. kết hợp[có thể lặp lại , r]¶
Trả về các chuỗi con độ dài r của các phần tử từ đầu vào có thể lặp lại
Các bộ dữ liệu kết hợp được phát ra theo thứ tự từ điển theo thứ tự của đầu vào có thể lặp lại. Vì vậy, nếu lần lặp đầu vào được sắp xếp, các bộ dữ liệu đầu ra sẽ được tạo theo thứ tự đã sắp xếp
Các yếu tố được coi là duy nhất dựa trên vị trí của chúng, không dựa trên giá trị của chúng. Vì vậy, nếu các phần tử đầu vào là duy nhất, sẽ không có giá trị lặp lại trong mỗi kết hợp
Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1
Mã cho
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18 cũng có thể được biểu thị dưới dạng chuỗi con của
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17 sau khi lọc các mục trong đó các phần tử không được sắp xếp theo thứ tự [theo vị trí của chúng trong nhóm đầu vào]
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1
Số lượng mặt hàng được trả lại là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element27 khi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element28 hoặc bằng 0 khi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element29itertools. combinations_with_replacement[có thể lặp lại , r]¶
Trả về các chuỗi con có độ dài r của các phần tử từ đầu vào có thể lặp lại cho phép các phần tử riêng lẻ được lặp lại nhiều lần
Các bộ dữ liệu kết hợp được phát ra theo thứ tự từ điển theo thứ tự của đầu vào có thể lặp lại. Vì vậy, nếu lần lặp đầu vào được sắp xếp, các bộ dữ liệu đầu ra sẽ được tạo theo thứ tự đã sắp xếp
Các yếu tố được coi là duy nhất dựa trên vị trí của chúng, không dựa trên giá trị của chúng. Vì vậy, nếu các phần tử đầu vào là duy nhất, thì các kết hợp được tạo cũng sẽ là duy nhất
Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1
Mã cho
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19 cũng có thể được biểu thị dưới dạng chuỗi con của
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16 sau khi lọc các mục trong đó các phần tử không được sắp xếp theo thứ tự [theo vị trí của chúng trong nhóm đầu vào]
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1
Số lượng mặt hàng được trả lại là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element12 khi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13
Mới trong phiên bản 3. 1
itertools. nén[dữ liệu , bộ chọn]¶Tạo một trình vòng lặp lọc các phần tử từ dữ liệu chỉ trả về những phần tử có phần tử tương ứng trong bộ chọn có giá trị là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14. Dừng khi hết dữ liệu hoặc bộ chọn lặp lại. Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element2
Mới trong phiên bản 3. 1
itertools. đếm[bắt đầu=0, step=1]¶Tạo một trình vòng lặp trả về các giá trị cách đều nhau bắt đầu bằng số bắt đầu. Thường được sử dụng làm đối số cho
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1 để tạo các điểm dữ liệu liên tiếp. Ngoài ra, được sử dụng với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16 để thêm số thứ tự. Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1
Khi đếm với các số dấu phẩy động, đôi khi có thể đạt được độ chính xác cao hơn bằng cách thay thế mã nhân như.
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17
Đã thay đổi trong phiên bản 3. 1. Đã thêm đối số bước và cho phép đối số không phải là số nguyên.
itertools. chu kỳ[có thể lặp lại] ¶Tạo một iterator trả về các phần tử từ iterable và lưu một bản sao của từng phần tử. Khi iterable cạn kiệt, hãy trả lại các phần tử từ bản sao đã lưu. Lặp lại vô thời hạn. Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element50
Lưu ý, thành viên này của bộ công cụ có thể yêu cầu bộ nhớ phụ đáng kể [tùy thuộc vào độ dài của lần lặp]
itertools. dropwhile[vị ngữ , có thể lặp lại]¶Tạo một trình vòng lặp loại bỏ các phần tử khỏi vòng lặp miễn là vị từ là đúng; . Lưu ý, trình vòng lặp không tạo ra bất kỳ đầu ra nào cho đến khi vị từ đầu tiên trở thành sai, do đó, nó có thể có thời gian khởi động lâu. Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element51itertools. filterfalse[vị ngữ , có thể lặp lại]¶
Tạo một iterator lọc các phần tử từ iterable chỉ trả về những phần tử có vị từ là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18. Nếu vị ngữ là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19, hãy trả lại các mục sai. Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element52itertools. nhóm theo[có thể lặp lại , phím=None]¶
Tạo một trình vòng lặp trả về các khóa và nhóm liên tiếp từ vòng lặp. Khóa là một hàm tính toán giá trị khóa cho từng phần tử. Nếu không được chỉ định hoặc là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19, khóa sẽ mặc định là hàm nhận dạng và trả về phần tử không thay đổi. Nói chung, iterable cần phải được sắp xếp trên cùng một chức năng chính
Hoạt động của
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14 tương tự như bộ lọc
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element502 trong Unix. Nó tạo ra một ngắt hoặc nhóm mới mỗi khi giá trị của hàm chính thay đổi [đó là lý do tại sao thường cần phải sắp xếp dữ liệu bằng cùng một hàm chính]. Hành vi đó khác với GROUP BY của SQL tổng hợp các phần tử phổ biến bất kể thứ tự đầu vào của chúng
Bản thân nhóm được trả về là một iterator chia sẻ iterable cơ bản với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14. Vì nguồn được chia sẻ nên khi đối tượng
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14 được nâng cao, nhóm trước đó sẽ không còn hiển thị nữa. Vì vậy, nếu dữ liệu đó cần thiết sau này, nó sẽ được lưu trữ dưới dạng danh sách
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element53
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14 gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element54itertools. islice[có thể lặp lại , dừng . ]¶itertools.islice[có thể lặp lại , bắt đầu, stop[, step]]
Tạo một trình lặp trả về các phần tử đã chọn từ có thể lặp lại. Nếu start khác 0, thì các phần tử từ iterable sẽ bị bỏ qua cho đến khi bắt đầu. Sau đó, các phần tử được trả về liên tiếp trừ khi bước được đặt cao hơn bước dẫn đến các mục bị bỏ qua. Nếu điểm dừng là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19, thì quá trình lặp tiếp tục cho đến khi hết trình lặp, nếu có;
Nếu bắt đầu là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19, thì quá trình lặp lại bắt đầu từ 0. Nếu bước là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19, thì bước này mặc định là một
Không giống như cắt thông thường,
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element15 không hỗ trợ các giá trị âm cho bắt đầu, dừng hoặc bước. Có thể được sử dụng để trích xuất các trường liên quan từ dữ liệu có cấu trúc bên trong đã được làm phẳng [ví dụ: báo cáo nhiều dòng có thể liệt kê một trường tên trên mỗi dòng thứ ba]
Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element55itertools. theo cặp[có thể lặp lại] ¶
Trả về các cặp chồng chéo liên tiếp được lấy từ đầu vào có thể lặp lại
Số lượng 2 bộ trong trình vòng lặp đầu ra sẽ ít hơn một lần so với số lượng đầu vào. Nó sẽ trống nếu đầu vào có thể lặp lại có ít hơn hai giá trị
Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element56
Mới trong phiên bản 3. 10
itertools. hoán vị[có thể lặp lại , r=None]¶Trả về các hoán vị chiều dài r liên tiếp của các phần tử trong iterable
Nếu r không được chỉ định hoặc là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19, thì r mặc định là độ dài của lần lặp và tất cả các hoán vị độ dài đầy đủ có thể được tạo
Các bộ hoán vị được phát ra theo thứ tự từ điển theo thứ tự của đầu vào có thể lặp lại. Vì vậy, nếu lần lặp đầu vào được sắp xếp, các bộ dữ liệu đầu ra sẽ được tạo theo thứ tự đã sắp xếp
Các yếu tố được coi là duy nhất dựa trên vị trí của chúng, không dựa trên giá trị của chúng. Vì vậy, nếu các phần tử đầu vào là duy nhất, sẽ không có giá trị lặp lại trong một hoán vị
Gần tương đương với
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element57
Mã cho
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17 cũng có thể được biểu thị dưới dạng chuỗi con của
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16, được lọc để loại trừ các mục có phần tử lặp lại [những mục từ cùng một vị trí trong nhóm đầu vào]
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element58
Số lượng mặt hàng được trả lại là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element513 khi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element28 hoặc bằng 0 khi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element29itertools. sản phẩm[*có thể lặp lại , repeat=1]¶
Sản phẩm Descartes của các lần lặp đầu vào
Gần tương đương với các vòng lặp for lồng nhau trong biểu thức trình tạo. Ví dụ:
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element516 trả về giống như
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element517
Các vòng lặp lồng nhau giống như một máy đo đường với phần tử ngoài cùng bên phải tăng dần trên mỗi lần lặp. Mẫu này tạo ra một thứ tự từ điển để nếu các lần lặp của đầu vào được sắp xếp, các bộ sản phẩm được phát ra theo thứ tự đã sắp xếp
Để tính tích của một lần lặp với chính nó, hãy chỉ định số lần lặp lại với đối số từ khóa lặp lại tùy chọn. Ví dụ:
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element518 có nghĩa giống như
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element519
Hàm này gần tương đương với đoạn mã sau, ngoại trừ việc triển khai thực tế không tạo kết quả trung gian trong bộ nhớ
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element59
Trước khi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element16 chạy, nó tiêu thụ hoàn toàn các lần lặp đầu vào, giữ các nhóm giá trị trong bộ nhớ để tạo sản phẩm. Theo đó, nó chỉ hữu ích với đầu vào hữu hạnitertools. lặp lại[đối tượng[ , times]]¶
Tạo một trình vòng lặp trả về đối tượng nhiều lần. Chạy vô thời hạn trừ khi đối số lần được chỉ định
Gần tương đương với
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element0
Một cách sử dụng phổ biến để lặp lại là cung cấp một luồng giá trị không đổi cho ánh xạ hoặc zip
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element1itertools. starmap[chức năng , có thể lặp lại]¶
Tạo một trình lặp tính toán hàm bằng cách sử dụng các đối số thu được từ trình lặp. Được sử dụng thay cho
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1 khi các tham số đối số đã được nhóm trong các bộ dữ liệu từ một lần lặp duy nhất [khi dữ liệu đã được “nén trước”]
Sự khác biệt giữa
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19 tương đương với sự khác biệt giữa
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element524 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element525. Gần tương đương với
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element2itertools. taketime[vị ngữ , có thể lặp lại]¶
Tạo một iterator trả về các phần tử từ iterable miễn là vị từ là đúng. Gần tương đương với
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element3itertools. tee[có thể lặp lại , n=2]¶
Trả về n trình vòng lặp độc lập từ một lần lặp duy nhất
Mã Python sau đây giúp giải thích chức năng của tee [mặc dù việc triển khai thực tế phức tạp hơn và chỉ sử dụng một hàng đợi FIFO bên dưới]
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element4
Khi một
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13 đã được tạo, bản gốc có thể lặp lại không được sử dụng ở bất kỳ nơi nào khác;
Trình vòng lặp
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element527 không phải là luồng an toàn. Một
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element528 có thể được nâng lên khi sử dụng đồng thời các trình lặp được trả về bởi cùng một lệnh gọi
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13, ngay cả khi trình lặp ban đầu là luồng an toàn
Itertool này có thể yêu cầu bộ nhớ phụ đáng kể [tùy thuộc vào lượng dữ liệu tạm thời cần được lưu trữ]. Nói chung, nếu một trình vòng lặp sử dụng hầu hết hoặc tất cả dữ liệu trước khi một trình vòng lặp khác bắt đầu, thì việc sử dụng
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element530 thay vì
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element13 sẽ nhanh hơnitertools. zip_longest[*có thể lặp lại , fillvalue=None]¶
Tạo một trình lặp tổng hợp các phần tử từ mỗi lần lặp. Nếu các lần lặp có độ dài không đồng đều, các giá trị bị thiếu sẽ được điền vào bằng giá trị điền. Lặp lại tiếp tục cho đến khi hết lần lặp dài nhất. Gần tương đương với
def chain[*iterables]: # chain['ABC', 'DEF'] --> A B C D E F for it in iterables: for element in it: yield element5
Nếu một trong các lần lặp có khả năng là vô hạn, thì hàm
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element14 phải được gói bằng thứ gì đó giới hạn số lần gọi [ví dụ:
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element15 hoặc
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element11]. Nếu không được chỉ định, giá trị điền mặc định là
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element19
Công thức Itertools¶
Phần này hiển thị các công thức để tạo bộ công cụ mở rộng bằng cách sử dụng các công cụ lặp hiện có làm khối xây dựng
Mục đích chính của công thức itertools là giáo dục. Các công thức cho thấy nhiều cách suy nghĩ khác nhau về các công cụ riêng lẻ - ví dụ:
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element536 có liên quan đến khái niệm làm phẳng. Các công thức nấu ăn cũng đưa ra ý tưởng về cách kết hợp các công cụ — ví dụ: cách
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element538 có thể hoạt động cùng nhau. Các công thức nấu ăn cũng hiển thị các mẫu sử dụng itertools với các mô-đun
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element4 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element540 cũng như với các itertools tích hợp như
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element1,
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element542,
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element543 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element544
Mục đích phụ của các công thức nấu ăn là để phục vụ như một lồng ấp. Các công cụ lặp
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element12,
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element18 và
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element17 bắt đầu dưới dạng công thức nấu ăn. Hiện tại, công thức
def from_iterable[iterables]: # chain.from_iterable[['ABC', 'DEF']] --> A B C D E F for it in iterables: for element in it: yield element548 đang được thử nghiệm để xem liệu nó có chứng minh được giá trị của nó hay không
Về cơ bản, tất cả các công thức này và nhiều, rất nhiều công thức khác có thể được cài đặt từ dự án more-itertools được tìm thấy trên Chỉ mục gói Python