2012-12-22 46 views
8

thể trùng lặp:
Power set and Cartesian Product of a set pythonPython itertools hoán vị làm thế nào để bao gồm ký tự lặp lại

Với Python Itertools.permutations() Tôi muốn nhận và đầu ra của hoán vị với các nhân vật lặp đi lặp lại. Đối với một ví dụ này chức năng của tôi dưới đây và sản lượng hiện tại của nó.

def perm(n,i): 
    b = 0 
    while b < n: 
     n= n -1 
     from itertools import permutations as p 
     file.write('\n'.join([''.join(item) for item in p(i,n)])) 
perm(4,'0123') 

đầu ra là:

012 
013 
021 
023 
031 
032 
102 
103 
120 
123 
130 
132 
201 
203 
210 
213 
230 
231 
301 
302 
310 
312 
320 
321..... 

thế nào tôi sẽ nhận được một sản lượng như 112 hay 222?

từ những gì tôi hiểu các kết hợp không phải là thứ tự cụ thể khi hoán vị. những gì tôi đang tìm kiếm là tìm tất cả các kết hợp sau đó mỗi hoán vị cho mỗi kết hợp. Điều này có thể không?

+1

Tại sao nhập khẩu 'hoán vị' mỗi lần trong vòng lặp? Và tại sao dòng '; 'mở rộng? Bạn có thể dọn dẹp ít nhất .. –

Trả lời

18

Bạn không muốn hoán vị chút nào. Bạn muốn sản phẩm Descartes:

import itertools 

def perm(n, seq): 
    for p in itertools.product(seq, repeat=n): 
     file.write("".join(p)) 
     file.write("\n") 

perm(4, "0123") 
3

Điều bạn có vẻ đang tìm kiếm là Cartesian product, không phải là hoán vị, cũng được cung cấp bởi itertools.

Bạn có thể làm quen với sự khác biệt giữa hoán vị, kết hợp, kết hợp với thay thế và sản phẩm Descartes để quyết định ứng dụng nào hoạt động tốt nhất, nhưng rất có thể, bạn đang tìm kiếm một tùy chọn khác.

+0

Tôi nghĩ rằng trong một giây nữa, nhưng OP dường như muốn cả hai '012' và' 102' - hoặc ít nhất anh ta không bình luận về nó trong danh sách của mình - trong trường hợp nào anh ấy có thể sau 'itertools.product'. – DSM

+0

Vâng, tôi nghĩ bạn nói đúng. Tôi sẽ chỉnh sửa. – acjay

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