2011-12-26 33 views
8

Bạn biết làm thế nào flatMap mất một chuỗi các mặt hàng và chuyển đổi mỗi người thành một dãy mới, tập hợp tất cả các subsequences:Chức năng đối diện với sơ đồ phẳng?

[A, B, C] -> [A1, A2, B1, B2, B3, C1] 

Có một tên cho biến đổi mà không ngược lại? Một cái gì đó như:

[A1, A2, B1, B2, B3, C1] -> [A, B, C] 

Ví dụ cụ thể mà tôi đã suy nghĩ về vấn đề này đang làm đánh giá các biểu thức toán học:

1 * 2 + 3 * 4 + 5 + 6 * 7 * 8 
-> 2 + 12 + 5 + 6 + 336 
-> 361 

riêng, việc thẩm định 6 * 7 * 8 có vẻ như một reduce bước cổ điển, trong khi quyết định các khối cần được giảm sẽ cần lặp lại các bước takeWhile.

Tôi biết cách thực hiện điều này theo cách lặp lại cổ điển, theo dõi các chỉ mục và tất cả điều đó. Đối với hầu hết các trường hợp, tôi đã tìm thấy một thay thế chức năng tốt đẹp cho hầu hết các mẫu lặp lại. Có một tên cho một hoạt động đơn lẻ thực hiện điều này hay một tập hợp các phép toán đơn giản có thể được tạo thành để tạo ra hiệu ứng này không?

Trả lời

6

Tôi nghĩ đối diện của flatmapgroupby.

$ python3 
>>> from itertools import groupby 
>>> groupby(['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], lambda x: x[0]) 
+0

Điều này phải được đánh dấu là chính xác. – Robert

Các vấn đề liên quan