Получить отсортированные комбинации - PullRequest
5 голосов
/ 06 апреля 2011

У меня есть вход как

A = [2,0,1,3,2,2,0,1,1,2,0].

После удаления всех дубликатов

A = list(Set(A))

А теперь [0,1,2,3]. Теперь мне нужны все комбинации пар, которые я могу составить с помощью этого списка, однако они не обязательно должны быть уникальными ... таким образом, [0,3] равно [3,0] и [2,3] равно [3,2]. В этом примере он должен вернуть

[[0,1],[0,2],[0,3],[1,2],[1,3],[2,3]]

Как мне этого добиться? Я посмотрел в iteratools lib. Но не смог найти решение.

1 Ответ

12 голосов
/ 06 апреля 2011
>>> A = [2,0,1,3,2,2,0,1,1,2,0]
>>> A = sorted(set(A))   # list(set(A)) is not usually in order
>>> from itertools import combinations
>>> list(combinations(A, 2))
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

>>> map(list, combinations(A, 2))
[[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]

>>> help(combinations)
Help on class combinations in module itertools:

class combinations(__builtin__.object)
 |  combinations(iterable, r) --> combinations object
 |  
 |  Return successive r-length combinations of elements in the iterable.
 |  
 |  combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)
 |  
 |  Methods defined here:
 |  
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |  
 |  __iter__(...)
 |      x.__iter__() <==> iter(x)
 |  
 |  next(...)
 |      x.next() -> the next value, or raise StopIteration
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T
...