-2

I am wondering how would you get all possible combinations from as list.

list1 = [1,5,3]

This should return:

ans = [1,5,3,15,13,51,53,31,35,153,135,315,351,531,513]

Thanks for the replies
Adam

Mazdak
  • 105,000
  • 18
  • 159
  • 188
A tsang
  • 21
  • 1
  • 4
  • Are they all integers? what have you tried already? – Mazdak Mar 19 '17 at 19:29
  • Possible duplicate of [How to get all possible combinations of a list’s elements?](http://stackoverflow.com/questions/464864/how-to-get-all-possible-combinations-of-a-list-s-elements) – Ari Cooper-Davis Mar 19 '17 at 19:41

3 Answers3

2

You want the permutations, not the combinations :

from itertools import permutations

list1 = [1,5,3]
n = len(list1)

print([int("".join(map(str, ints))) for i in range(n)
       for ints in permutations(list1, i + 1)])
# [1, 5, 3, 15, 13, 51, 53, 31, 35, 153, 135, 513, 531, 315, 351]
Eric Duminil
  • 52,989
  • 9
  • 71
  • 124
0

Yo can do it like that:

import itertools
import operator
import numpy as np
a=[1,2,3]
[list(i) for i in reduce(operator.add,[list(itertools.combinations(a,i)) for i in range(1,len(a)+1)])]

Then the result is

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

If you want it to have the exact format you listed in the question, you can do

import itertools
import operator
import numpy as np
a=[1,2,3]
a=[str(i) for i in a]
[int(''.join(list(i))) for i in reduce(operator.add,[list(itertools.combinations(a,i)) for i in range(1,len(a)+1)])]

The result is

[1, 2, 3, 12, 13, 23, 123]
Miriam Farber
  • 18,986
  • 14
  • 61
  • 76
0

by brute force:

import random

list1 = [1,5,3]
brute = 1000

combos = []
for i in range(brute):
    random.shuffle(list1)
    z = ''.join(str(x) for x in list1)
    for i in range(len(list1)):
        combos.append(int(z[i:]))
combos = sorted(list(set(combos)))
print combos




>>>[1, 3, 5, 13, 15, 31, 35, 51, 53, 135, 153, 315, 351, 513, 531]
litepresence
  • 3,109
  • 1
  • 27
  • 35