trying all combinations of operations on list of variables
<p>I have a list of values like:</p>

<pre><code>values = [1, 2, 3, 4]
</code></pre>

<p>and I want to try all combinations on this list like:</p>

<pre><code>1 + 2
1 + 3
1 + 4
1 * 2
1 * 3
1 * 4
1 + 2 * 3
1 + 2 * 4
1 + 3 * 4
</code></pre>

<p>etc.</p>

<p>What would be the most straightforward way to get all these possible combinations of operations in the most succinct way possible?</p>

<p>I would imagine having two lists, [1,2,3,4] and [+, *, -, /] and then taking all combinations of the numbers of all lengths, and then filling in the blanks with all combinations.</p>

<p>So selecting [1, 2, 3] and then selecting all permutations of the operations and combining them together.  This seems messy and I'm hoping there's a clearer way to code this?</p>

<p>How about this one (since order of the operands and operators does matter, we must use permutation) ?</p>

<pre><code>from itertools import chain, permutations

def powerset(iterable):
  xs = list(iterable)
  return chain.from_iterable(permutations(xs,n) for n in range(len(xs)+1) )

lst_expr = []
for operands in map(list, powerset(['1','2','3','4'])):
    n = len(operands)
    #print operands
    if n &gt; 1:
        all_operators = map(list, permutations(['+','-','*','/'],n-1))
        #print all_operators, operands
        for operators in all_operators:
            exp = operands[0]
            i = 1
            for operator in operators:
                exp += operator + operands[i]
                i += 1
            lst_expr += [exp]

print ', '.join(lst_expr)
</code></pre>

<p>with the following output:</p>

<pre><code>1+2, 1-2, 1*2, 1/2, 1+3, 1-3, 1*3, 1/3, 1+4, 1-4, 1*4, 1/4, 2+1, 2-1, 2*1, 2/1, 2+3, 2-3, 2*3, 2/3, 2+4, 2-4, 2*4, 2/4, 3+1, 3-1, 3*1, 3/1, 3+2, 3-2, 3*2, 3/2, 3+4, 3-4, 3*4, 3/4, 4+1, 4-1, 4*1, 4/1, 4+2, 4-2, 4*2, 4/2, 4+3, 4-3, 4*3, 4/3, 1+2-3, 1+2*3, 1+2/3, 1-2+3, 1-2*3, 1-2/3, 1*2+3, 1*2-3, 1*2/3, 1/2+3, 1/2-3, 1/2*3, 1+2-4, 1+2*4, 1+2/4, 1-2+4, 1-2*4, 1-2/4, 1*2+4, 1*2-4, 1*2/4, 1/2+4, 1/2-4, 1/2*4, 1+3-2, 1+3*2, 1+3/2, 1-3+2, 1-3*2, 1-3/2, 1*3+2, 1*3-2, 1*3/2, 1/3+2, 1/3-2, 1/3*2, 1+3-4, 1+3*4, 1+3/4, 1-3+4, 1-3*4, 1-3/4, 1*3+4, 1*3-4, 1*3/4, 1/3+4, 1/3-4, 1/3*4, 1+4-2, 1+4*2, 1+4/2, 1-4+2, 1-4*2, 1-4/2, 1*4+2, 1*4-2, 1*4/2, 1/4+2, 1/4-2, 1/4*2, 1+4-3, 1+4*3, 1+4/3, 1-4+3, 1-4*3, 1-4/3, 1*4+3, 1*4-3, 1*4/3, 1/4+3, 1/4-3, 1/4*3, 2+1-3, 2+1*3, 2+1/3, 2-1+3, 2-1*3, 2-1/3, 2*1+3, 2*1-3, 2*1/3, 2/1+3, 2/1-3, 2/1*3, 2+1-4, 2+1*4, 2+1/4, 2-1+4, 2-1*4, 2-1/4, 2*1+4, 2*1-4, 2*1/4, 2/1+4, 2/1-4, 2/1*4, 2+3-1, 2+3*1, 2+3/1, 2-3+1, 2-3*1, 2-3/1, 2*3+1, 2*3-1, 2*3/1, 2/3+1, 2/3-1, 2/3*1, 2+3-4, 2+3*4, 2+3/4, 2-3+4, 2-3*4, 2-3/4, 2*3+4, 2*3-4, 2*3/4, 2/3+4, 2/3-4, 2/3*4, 2+4-1, 2+4*1, 2+4/1, 2-4+1, 2-4*1, 2-4/1, 2*4+1, 2*4-1, 2*4/1, 2/4+1, 2/4-1, 2/4*1, 2+4-3, 2+4*3, 2+4/3, 2-4+3, 2-4*3, 2-4/3, 2*4+3, 2*4-3, 2*4/3, 2/4+3, 2/4-3, 2/4*3, 3+1-2, 3+1*2, 3+1/2, 3-1+2, 3-1*2, 3-1/2, 3*1+2, 3*1-2, 3*1/2, 3/1+2, 3/1-2, 3/1*2, 3+1-4, 3+1*4, 3+1/4, 3-1+4, 3-1*4, 3-1/4, 3*1+4, 3*1-4, 3*1/4, 3/1+4, 3/1-4, 3/1*4, 3+2-1, 3+2*1, 3+2/1, 3-2+1, 3-2*1, 3-2/1, 3*2+1, 3*2-1, 3*2/1, 3/2+1, 3/2-1, 3/2*1, 3+2-4, 3+2*4, 3+2/4, 3-2+4, 3-2*4, 3-2/4, 3*2+4, 3*2-4, 3*2/4, 3/2+4, 3/2-4, 3/2*4, 3+4-1, 3+4*1, 3+4/1, 3-4+1, 3-4*1, 3-4/1, 3*4+1, 3*4-1, 3*4/1, 3/4+1, 3/4-1, 3/4*1, 3+4-2, 3+4*2, 3+4/2, 3-4+2, 3-4*2, 3-4/2, 3*4+2, 3*4-2, 3*4/2, 3/4+2, 3/4-2, 3/4*2, 4+1-2, 4+1*2, 4+1/2, 4-1+2, 4-1*2, 4-1/2, 4*1+2, 4*1-2, 4*1/2, 4/1+2, 4/1-2, 4/1*2, 4+1-3, 4+1*3, 4+1/3, 4-1+3, 4-1*3, 4-1/3, 4*1+3, 4*1-3, 4*1/3, 4/1+3, 4/1-3, 4/1*3, 4+2-1, 4+2*1, 4+2/1, 4-2+1, 4-2*1, 4-2/1, 4*2+1, 4*2-1, 4*2/1, 4/2+1, 4/2-1, 4/2*1, 4+2-3, 4+2*3, 4+2/3, 4-2+3, 4-2*3, 4-2/3, 4*2+3, 4*2-3, 4*2/3, 4/2+3, 4/2-3, 4/2*3, 4+3-1, 4+3*1, 4+3/1, 4-3+1, 4-3*1, 4-3/1, 4*3+1, 4*3-1, 4*3/1, 4/3+1, 4/3-1, 4/3*1, 4+3-2, 4+3*2, 4+3/2, 4-3+2, 4-3*2, 4-3/2, 4*3+2, 4*3-2, 4*3/2, 4/3+2, 4/3-2, 4/3*2, 1+2-3*4, 1+2-3/4, 1+2*3-4, 1+2*3/4, 1+2/3-4, 1+2/3*4, 1-2+3*4, 1-2+3/4, 1-2*3+4, 1-2*3/4, 1-2/3+4, 1-2/3*4, 1*2+3-4, 1*2+3/4, 1*2-3+4, 1*2-3/4, 1*2/3+4, 1*2/3-4, 1/2+3-4, 1/2+3*4, 1/2-3+4, 1/2-3*4, 1/2*3+4, 1/2*3-4, 1+2-4*3, 1+2-4/3, 1+2*4-3, 1+2*4/3, 1+2/4-3, 1+2/4*3, 1-2+4*3, 1-2+4/3, 1-2*4+3, 1-2*4/3, 1-2/4+3, 1-2/4*3, 1*2+4-3, 1*2+4/3, 1*2-4+3, 1*2-4/3, 1*2/4+3, 1*2/4-3, 1/2+4-3, 1/2+4*3, 1/2-4+3, 1/2-4*3, 1/2*4+3, 1/2*4-3, 1+3-2*4, 1+3-2/4, 1+3*2-4, 1+3*2/4, 1+3/2-4, 1+3/2*4, 1-3+2*4, 1-3+2/4, 1-3*2+4, 1-3*2/4, 1-3/2+4, 1-3/2*4, 1*3+2-4, 1*3+2/4, 1*3-2+4, 1*3-2/4, 1*3/2+4, 1*3/2-4, 1/3+2-4, 1/3+2*4, 1/3-2+4, 1/3-2*4, 1/3*2+4, 1/3*2-4, 1+3-4*2, 1+3-4/2, 1+3*4-2, 1+3*4/2, 1+3/4-2, 1+3/4*2, 1-3+4*2, 1-3+4/2, 1-3*4+2, 1-3*4/2, 1-3/4+2, 1-3/4*2, 1*3+4-2, 1*3+4/2, 1*3-4+2, 1*3-4/2, 1*3/4+2, 1*3/4-2, 1/3+4-2, 1/3+4*2, 1/3-4+2, 1/3-4*2, 1/3*4+2, 1/3*4-2, 1+4-2*3, 1+4-2/3, 1+4*2-3, 1+4*2/3, 1+4/2-3, 1+4/2*3, 1-4+2*3, 1-4+2/3, 1-4*2+3, 1-4*2/3, 1-4/2+3, 1-4/2*3, 1*4+2-3, 1*4+2/3, 1*4-2+3, 1*4-2/3, 1*4/2+3, 1*4/2-3, 1/4+2-3, 1/4+2*3, 1/4-2+3, 1/4-2*3, 1/4*2+3, 1/4*2-3, 1+4-3*2, 1+4-3/2, 1+4*3-2, 1+4*3/2, 1+4/3-2, 1+4/3*2, 1-4+3*2, 1-4+3/2, 1-4*3+2, 1-4*3/2, 1-4/3+2, 1-4/3*2, 1*4+3-2, 1*4+3/2, 1*4-3+2, 1*4-3/2, 1*4/3+2, 1*4/3-2, 1/4+3-2, 1/4+3*2, 1/4-3+2, 1/4-3*2, 1/4*3+2, 1/4*3-2, 2+1-3*4, 2+1-3/4, 2+1*3-4, 2+1*3/4, 2+1/3-4, 2+1/3*4, 2-1+3*4, 2-1+3/4, 2-1*3+4, 2-1*3/4, 2-1/3+4, 2-1/3*4, 2*1+3-4, 2*1+3/4, 2*1-3+4, 2*1-3/4, 2*1/3+4, 2*1/3-4, 2/1+3-4, 2/1+3*4, 2/1-3+4, 2/1-3*4, 2/1*3+4, 2/1*3-4, 2+1-4*3, 2+1-4/3, 2+1*4-3, 2+1*4/3, 2+1/4-3, 2+1/4*3, 2-1+4*3, 2-1+4/3, 2-1*4+3, 2-1*4/3, 2-1/4+3, 2-1/4*3, 2*1+4-3, 2*1+4/3, 2*1-4+3, 2*1-4/3, 2*1/4+3, 2*1/4-3, 2/1+4-3, 2/1+4*3, 2/1-4+3, 2/1-4*3, 2/1*4+3, 2/1*4-3, 2+3-1*4, 2+3-1/4, 2+3*1-4, 2+3*1/4, 2+3/1-4, 2+3/1*4, 2-3+1*4, 2-3+1/4, 2-3*1+4, 2-3*1/4, 2-3/1+4, 2-3/1*4, 2*3+1-4, 2*3+1/4, 2*3-1+4, 2*3-1/4, 2*3/1+4, 2*3/1-4, 2/3+1-4, 2/3+1*4, 2/3-1+4, 2/3-1*4, 2/3*1+4, 2/3*1-4, 2+3-4*1, 2+3-4/1, 2+3*4-1, 2+3*4/1, 2+3/4-1, 2+3/4*1, 2-3+4*1, 2-3+4/1, 2-3*4+1, 2-3*4/1, 2-3/4+1, 2-3/4*1, 2*3+4-1, 2*3+4/1, 2*3-4+1, 2*3-4/1, 2*3/4+1, 2*3/4-1, 2/3+4-1, 2/3+4*1, 2/3-4+1, 2/3-4*1, 2/3*4+1, 2/3*4-1, 2+4-1*3, 2+4-1/3, 2+4*1-3, 2+4*1/3, 2+4/1-3, 2+4/1*3, 2-4+1*3, 2-4+1/3, 2-4*1+3, 2-4*1/3, 2-4/1+3, 2-4/1*3, 2*4+1-3, 2*4+1/3, 2*4-1+3, 2*4-1/3, 2*4/1+3, 2*4/1-3, 2/4+1-3, 2/4+1*3, 2/4-1+3, 2/4-1*3, 2/4*1+3, 2/4*1-3, 2+4-3*1, 2+4-3/1, 2+4*3-1, 2+4*3/1, 2+4/3-1, 2+4/3*1, 2-4+3*1, 2-4+3/1, 2-4*3+1, 2-4*3/1, 2-4/3+1, 2-4/3*1, 2*4+3-1, 2*4+3/1, 2*4-3+1, 2*4-3/1, 2*4/3+1, 2*4/3-1, 2/4+3-1, 2/4+3*1, 2/4-3+1, 2/4-3*1, 2/4*3+1, 2/4*3-1, 3+1-2*4, 3+1-2/4, 3+1*2-4, 3+1*2/4, 3+1/2-4, 3+1/2*4, 3-1+2*4, 3-1+2/4, 3-1*2+4, 3-1*2/4, 3-1/2+4, 3-1/2*4, 3*1+2-4, 3*1+2/4, 3*1-2+4, 3*1-2/4, 3*1/2+4, 3*1/2-4, 3/1+2-4, 3/1+2*4, 3/1-2+4, 3/1-2*4, 3/1*2+4, 3/1*2-4, 3+1-4*2, 3+1-4/2, 3+1*4-2, 3+1*4/2, 3+1/4-2, 3+1/4*2, 3-1+4*2, 3-1+4/2, 3-1*4+2, 3-1*4/2, 3-1/4+2, 3-1/4*2, 3*1+4-2, 3*1+4/2, 3*1-4+2, 3*1-4/2, 3*1/4+2, 3*1/4-2, 3/1+4-2, 3/1+4*2, 3/1-4+2, 3/1-4*2, 3/1*4+2, 3/1*4-2, 3+2-1*4, 3+2-1/4, 3+2*1-4, 3+2*1/4, 3+2/1-4, 3+2/1*4, 3-2+1*4, 3-2+1/4, 3-2*1+4, 3-2*1/4, 3-2/1+4, 3-2/1*4, 3*2+1-4, 3*2+1/4, 3*2-1+4, 3*2-1/4, 3*2/1+4, 3*2/1-4, 3/2+1-4, 3/2+1*4, 3/2-1+4, 3/2-1*4, 3/2*1+4, 3/2*1-4, 3+2-4*1, 3+2-4/1, 3+2*4-1, 3+2*4/1, 3+2/4-1, 3+2/4*1, 3-2+4*1, 3-2+4/1, 3-2*4+1, 3-2*4/1, 3-2/4+1, 3-2/4*1, 3*2+4-1, 3*2+4/1, 3*2-4+1, 3*2-4/1, 3*2/4+1, 3*2/4-1, 3/2+4-1, 3/2+4*1, 3/2-4+1, 3/2-4*1, 3/2*4+1, 3/2*4-1, 3+4-1*2, 3+4-1/2, 3+4*1-2, 3+4*1/2, 3+4/1-2, 3+4/1*2, 3-4+1*2, 3-4+1/2, 3-4*1+2, 3-4*1/2, 3-4/1+2, 3-4/1*2, 3*4+1-2, 3*4+1/2, 3*4-1+2, 3*4-1/2, 3*4/1+2, 3*4/1-2, 3/4+1-2, 3/4+1*2, 3/4-1+2, 3/4-1*2, 3/4*1+2, 3/4*1-2, 3+4-2*1, 3+4-2/1, 3+4*2-1, 3+4*2/1, 3+4/2-1, 3+4/2*1, 3-4+2*1, 3-4+2/1, 3-4*2+1, 3-4*2/1, 3-4/2+1, 3-4/2*1, 3*4+2-1, 3*4+2/1, 3*4-2+1, 3*4-2/1, 3*4/2+1, 3*4/2-1, 3/4+2-1, 3/4+2*1, 3/4-2+1, 3/4-2*1, 3/4*2+1, 3/4*2-1, 4+1-2*3, 4+1-2/3, 4+1*2-3, 4+1*2/3, 4+1/2-3, 4+1/2*3, 4-1+2*3, 4-1+2/3, 4-1*2+3, 4-1*2/3, 4-1/2+3, 4-1/2*3, 4*1+2-3, 4*1+2/3, 4*1-2+3, 4*1-2/3, 4*1/2+3, 4*1/2-3, 4/1+2-3, 4/1+2*3, 4/1-2+3, 4/1-2*3, 4/1*2+3, 4/1*2-3, 4+1-3*2, 4+1-3/2, 4+1*3-2, 4+1*3/2, 4+1/3-2, 4+1/3*2, 4-1+3*2, 4-1+3/2, 4-1*3+2, 4-1*3/2, 4-1/3+2, 4-1/3*2, 4*1+3-2, 4*1+3/2, 4*1-3+2, 4*1-3/2, 4*1/3+2, 4*1/3-2, 4/1+3-2, 4/1+3*2, 4/1-3+2, 4/1-3*2, 4/1*3+2, 4/1*3-2, 4+2-1*3, 4+2-1/3, 4+2*1-3, 4+2*1/3, 4+2/1-3, 4+2/1*3, 4-2+1*3, 4-2+1/3, 4-2*1+3, 4-2*1/3, 4-2/1+3, 4-2/1*3, 4*2+1-3, 4*2+1/3, 4*2-1+3, 4*2-1/3, 4*2/1+3, 4*2/1-3, 4/2+1-3, 4/2+1*3, 4/2-1+3, 4/2-1*3, 4/2*1+3, 4/2*1-3, 4+2-3*1, 4+2-3/1, 4+2*3-1, 4+2*3/1, 4+2/3-1, 4+2/3*1, 4-2+3*1, 4-2+3/1, 4-2*3+1, 4-2*3/1, 4-2/3+1, 4-2/3*1, 4*2+3-1, 4*2+3/1, 4*2-3+1, 4*2-3/1, 4*2/3+1, 4*2/3-1, 4/2+3-1, 4/2+3*1, 4/2-3+1, 4/2-3*1, 4/2*3+1, 4/2*3-1, 4+3-1*2, 4+3-1/2, 4+3*1-2, 4+3*1/2, 4+3/1-2, 4+3/1*2, 4-3+1*2, 4-3+1/2, 4-3*1+2, 4-3*1/2, 4-3/1+2, 4-3/1*2, 4*3+1-2, 4*3+1/2, 4*3-1+2, 4*3-1/2, 4*3/1+2, 4*3/1-2, 4/3+1-2, 4/3+1*2, 4/3-1+2, 4/3-1*2, 4/3*1+2, 4/3*1-2, 4+3-2*1, 4+3-2/1, 4+3*2-1, 4+3*2/1, 4+3/2-1, 4+3/2*1, 4-3+2*1, 4-3+2/1, 4-3*2+1, 4-3*2/1, 4-3/2+1, 4-3/2*1, 4*3+2-1, 4*3+2/1, 4*3-2+1, 4*3-2/1, 4*3/2+1, 4*3/2-1, 4/3+2-1, 4/3+2*1, 4/3-2+1, 4/3-2*1, 4/3*2+1, 4/3*2-1
</code></pre>

python combinations