2012-01-27 44 views
6

Tôi có một danh sách [2,3,4]. Làm cách nào để tìm tất cả các phần tử có thể có trong danh sách? Vì vậy, đầu ra phải là: [2,3,4] [2,4,3] [3,2,4] [3,4,2] [4,2,3] [4 , 3,2]Làm cách nào để tìm tất cả các phần tử có thể có trong danh sách?

+0

thể trùng lặp của [Làm thế nào để tạo ra tất cả các hoán vị của một danh sách bằng Python] (http://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list-in-python) –

Trả lời

21

bạn có thể làm điều này dễ dàng sử dụng itertools.permutations():

>>> from itertools import permutations 
>>> list(permutations([2, 3, 4])) 
[(2, 3, 4), (2, 4, 3), (3, 2, 4), (3, 4, 2), (4, 2, 3), (4, 3, 2)] 

Và nếu vì một lý do bạn cần danh sách thay vì các bộ:

>>> map(list, permutations([2, 3, 4])) 
[[2, 3, 4], [2, 4, 3], [3, 2, 4], [3, 4, 2], [4, 2, 3], [4, 3, 2]] 
+3

Hy vọng danh sách OP có tất cả các yếu tố độc đáo. – Droogans

+1

Có thể thêm liên kết vào http://docs.python.org/library/itertools.html#itertools.permutations? –

5

bạn đang tìm kiếm permutati ons, một cái gì đó như thế này nên làm việc:

import itertools 
itertools.permutations([2,3,4]) 
2

một sự khởi đầu của một chương trình xổ số lớn trừ dữ liệu sẽ được formated như vậy

ist(permutations([2, 3, 4],[7,2,5],[8,1,4,9])) 

vấn đề là nhóm đầu tiên được sử dụng để tạo ra các con số trong đầu tiên cột chỉ các secound cho 2 cột và 3 là dành cho 3

đầu ra sẽ là một bộ 3 số chỉ là các hoán vị là khác nhau

1

Chỉ cần để bạn biết:

def unique_perms(elems): 
    """returns non-duplicate permutations 
     if duplicate elements exist in `elems` 
    """ 
    from itertools import permutations 
    return list(set(permutations(elems))) 

Nhưng nếu bạn đang làm một cái gì đó như thế này:

print len(unique_perms(elems)) 

Sau đó thử này:

def fac(n): 
    """n!""" 
    if n == 1: return n 
    return n * fac(n -1) 

def unique_perm_count(elems) 
    n = len(elems) 
    return fac(2 * n)/fac(n) ** 2 
Các vấn đề liên quan