Вы можете создать список, например, используя itertools
:
from itertools import permutations, chain, zip_longest
ints = [10, 20, 30, 40, 50]
opers = ['+', '-', '*', '/']
output = []
for int_perm in permutations(ints):
for op_perm in permutations(opers):
calculation = ''.join(map(str, chain.from_iterable(zip_longest(int_perm, op_perm, fillvalue=''))))
output.append(eval(calculation))
print(len(output))
# 2880
print(output)
# [6.0, -7.5, 609.2, -25.0, -1989.3333333333333, ...]
Небольшое объяснение: для двух приведенных перестановок ints
и opers
:
(10, 30, 50, 20, 40)
('-', '*', '/', '+')
zip_longest
даст нам: (обратите внимание, что, поскольку список opers
короче, пропущенное значение будет заполнено значением заполнения ''
)
print(list((zip_longest(int_perm, op_perm, fillvalue=''))))
# [(10, '-'), (30, '*'), (50, '/'), (20, '+'), (40, '')]
и цепочка кортежей в этом списке даст нам:
print(list(chain.from_iterable(zip_longest(int_perm, op_perm, fillvalue=''))))
# [10, '-', 30, '*', 50, '/', 20, '+', 40, '']
Нам просто нужно сопоставить все элементы со строками и присоединиться к ним, чтобы получить:
# '10-30*50/20+40'