2012-02-18 38 views
9

Lưu ý: Tôi đang làm việc trong python về điều này.Làm cách nào để tạo ra hoán vị có độ dài LEN cho danh sách N mục?

Ví dụ, đưa ra một danh sách:

list = ['a','b','c','d','e','f','g','h','i','j'] 

Tôi muốn tạo ra một danh sách liệt kê tất cả các kết hợp 3-item có thể:

['a','b','c'], 
['a','b','d'], 
['a','b','e'] 

Các hoán vị không nên sử dụng cùng một mục hai lần trong hoán vị, nhưng thứ tự quan trọng và đại diện cho các hoán vị riêng biệt cần được bao gồm, ví dụ:

['a','b','c'], 
['a','c','b'] 

Cả hai có nên được đưa vào hay không.

"3" là độ dài kỳ diệu cho các hoán vị mà tôi đang tìm kiếm để tạo, nhưng tôi sẽ không xem xét giải pháp cho các hoán vị dài tùy ý.

Cảm ơn bạn đã trợ giúp!

+1

Bạn có nghĩ về vấn đề này không? Có một điểm mà bạn đang gặp khó khăn? – simchona

+2

Tôi ghét phải nói điều đó, nhưng googling "hoán vị danh sách python" đã cho http://docs.python.org/library/itertools.html. – simchona

+0

Có người khác đã trả lời rồi, nhưng vâng, tôi đã cho nó một vài suy nghĩ, nhưng sau khi các khía cạnh khác của dự án liên quan đến nó, tôi đã đi vào khóa não và không thể nghĩ ra một phương pháp bạo lực với rất nhiều xấu. – Promethean

Trả lời

13
itertools.permutations(my_list, 3) 
+0

Ahh, cảm ơn! Tôi không biết mô-đun đó! Đó là những gì tôi nhận được vì không giữ hiện hành trên các thay đổi phiên bản mới! (Nhu cầu lập trình của tôi là một vài chương trình nhỏ một năm) – Promethean

12

Giả sử bạn đang ở trong python 2.6 hoặc mới hơn:

from itertools import permutations 
for i in permutations(your_list, 3): 
    print i 
+0

Cảm ơn, tôi luôn cập nhật bản phân phối với 3.2 nhưng việc học của tôi là trước 2.2, vì vậy tôi không biết điều này. – Promethean

+0

Itertools là bạn của bạn! – michaelfilms

+0

Chúa Giêsu các công cụ trong python là tuyệt vời. Hãy tưởng tượng làm điều này trong C hoặc C++ –

0

Bạn nên sử dụng chức năng permutations từ các module itertools.

>>> import itertools 
>>> lst = ['a','b','c','d','e','f','g','h','i','j'] 
>>> itertools.permutations(lst, 3) 

Hoặc, nếu bạn thực sự muốn kết hợp, hãy sử dụng chức năng combinations.

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