У меня есть все возможные комбинации операций между числами в списке:
list = ['2','7','8']
7+8*2
8+7*2
2*8+7
2+8*7
2-8*7
8-2/7
etc
Я хочу знать, можно ли сказать, что такие операции, как ('7*2+8' и '8+7*2' и '2*7+8') или (7*8*2 и 2*8*7 и 7*2*8) и т. д. одинаковы. Я хочу знать, как выполнить только одну операцию, если это одна и та же операция.
Это мой код для создания этих разных операций:
Op = ['+','-','*','/']
array = []
for i in Op:
array.append(string1 + i + string2)
return array
1 ответ
Если я вас хорошо понимаю, у меня есть идея для вас.
Прежде всего, вам нужно создать все возможные перестановки цифр и выражений. Вы можете сделать это следующим образом:
import itertools
num_list = ['2','7','8']
op = ['+','-','*','/'] * 2 # *2 for the case of same operator twice
num_perm = list(itertools.permutations(num_list))
op_perm = list(itertools.permutations(op, 2)) # We want perm of two operators.
Теперь вам нужно объединить все перестановки в математическое выражение, это хороший способ для этого:
list_of_experssions = list()
for num in num_perm :
for op in op_perm:
list_of_experssions.append(num[0] + op[0] + num[1] + op[1] +num[2])
Последний шаг — проверить, равны ли результаты двух выражений (используя функцию eval
), но сами выражения различны:
for exp1 in list_of_experssions:
for exp2 in list_of_experssions:
if eval(exp1) == eval(exp2) and exp1 != exp2:
print(exp1, exp2)
В вашем случае мы получили 336 математических выражений и 2560 пар равных выражений.
list_of_experssions.append(num[0] + op[0] + num[1] + op[1] +num[2])
, чтобы избежать повторного цикла.
7-8/2
и 2+8-7
как "дубликаты", так как они дают одно и то же значение (3), хотя разница между ними < b>не просто вопрос коммутативных операций.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
+
и*
как коммутативные операции, преобразовать выражения в каноническую форму и удалить дубликаты. Кроме того, 7+8*2 равнозначно 8+7*2 верно только в том случае, если вы игнорируете нормальный порядок операций.