作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个列表中数字之间所有可能的操作组合:
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' and '8+7*2' and '2*7+8') 或 (7*8*2 and 2*) 这样的操作8*7和7*2*8)等都是一样的。我想知道如果是相同的操作,如何只进行一次操作。
这是我创建这些不同操作的代码:
Op = ['+','-','*','/']
array = []
for i in Op:
array.append(string1 + i + string2)
return array
最佳答案
如果我很了解你,我想我有一个想法给你。
首先,您需要创建所有可能的数字和表达式排列。你可以这样做:
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 对等式。
关于python - 如何对 python 说 (a+b) = (b+a) 和 (a*b) = (b*a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61129467/
我是一名优秀的程序员,十分优秀!