2012-04-26 37 views
5

Tôi đang cố gắng tìm sản phẩm Descartes của hai bộ khác nhau. Tôi không thể tìm thấy bất kỳ thứ gì trên web về các sản phẩm mang tính Descartes của bộ đó là danh sách hoặc từ điển.Bộ nguồn và Cartesian Sản phẩm của bộ python

Bộ nguồn điện cũng rất khó hiểu.

Không có một trong số này nằm trong cuốn sách của tôi mà tôi đã sử dụng.

Có thể một trong những điểm tôi đã đi đúng hướng.

Trả lời

12

Đối với sản phẩm Descartes, hãy xem itertools.product.

Đối với Powerset, the itertools docs cũng cung cấp cho chúng ta một công thức:

def powerset(iterable): 
    "powerset([1,2,3]) -->() (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" 
    s = list(iterable) 
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) 

Ví dụ:

>>> test = {1, 2, 3} 
>>> list(powerset(test)) 
[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)] 
>>> list(product(test, test)) 
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)] 
+0

cảm ơn bạn đã chỉnh sửa nó làm cho nó rất nhiều rõ ràng hơn Tôi cố gắng để thực hiện những thành mã của tôi hiện đang làm tôi cần phải nhập itertools? Cảm ơn một lần nữa! – bradb

+0

Có, bạn cần phải nhập các hàm bạn sử dụng từ '' itertools'', giống như với bất kỳ hàm nào bạn sử dụng từ một mô-đun khác. –

+0

powerset có thể được định nghĩa tốt hơn với 's = set (iterable)'. – Darthfett

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