python - 如何跨两个列表获取整数和操作的所有组合?
问题描述
我有两个清单:
ints = [10, 20, 30, 40, 50]
和
opers = ['+', '-', '*', '/']
我想获得一个列表,其中包含这两个列表的所有可能组合,例如:
10+20*40-30/50 = 810
50-40+30*20/10 = 70
等等
然后列表应该是[810, 70, ...]
我相信这个列表中应该有 2880 个元素。如果int[0]==int[1]
,则出于此目的,它们将被视为单独的。
我想我将不得不使用eval()
两个实际获取列表中的元素。我只是不知道如何以这种方式排列这两个列表。任何帮助将不胜感激。
谢谢
解决方案
关键是使用itertools.permutations
功能。这是天真的方式:
import itertools
ints = [10, 20, 30, 40, 50]
opers = ['+', '-', '*', '/']
for i in itertools.permutations(ints):
for o in itertools.permutations(opers):
s = f'{i[0]}{o[0]}{i[1]}{o[1]}{i[2]}{o[2]}{i[3]}{o[3]}{i[4]}'
print(f'{s} = {eval(s)}')
输出看起来像这样(显然你可以放在字典或其他东西中):
...
50-10/30+40*20 = 849.6666666666666
50-10/30*40+20 = 56.66666666666667
50*10+30-40/20 = 528.0
50*10+30/40-20 = 480.75
50*10-30+40/20 = 472.0
50*10-30/40+20 = 519.25
50*10/30+40-20 = 36.66666666666667
50*10/30-40+20 = -3.333333333333332
50/10+30-40*20 = -765.0
50/10+30*40-20 = 1185.0
50/10-30+40*20 = 775.0
50/10-30*40+20 = -1175.0
50/10*30+40-20 = 170.0
50/10*30-40+20 = 130.0
50+10-40*20/30 = 33.33333333333333
...
推荐阅读
- database - 在键值存储之上实现查询?
- visual-studio - Visual Studio 正在删除我在 docker.compose.vs.debug.g.yml 中添加的环境变量
- node.js - 覆盖 package-lock.json 中已安装包的注册表
- android - 如何在片段中的 RecyclerView 适配器方法/对象中传递 String[] htmlFile 的引用
- java - 如何为多个按钮添加单个 actionListener 以将按下的按钮序列添加到 arrayList?
- python - 为什么分数实例变量在python中应该减少时没有减少
- node.js - 如何在 Putty 中关闭 node app.js 和
- sql - Redshift SQL WHERE 语句似乎没有正确过滤?
- yocto - 访问在 recepe 文件中的 shell 中导出的变量
- ios - Swift IOS 13,IAP - “无法连接到 Itunes Connect”