python - 如何获取两个列表中整数和运算的所有组合?

标签 python python-3.x permutation

我有两个列表:

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
...

关于python - 如何获取两个列表中整数和运算的所有组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52055506/

相关文章:

python - 从两个向量的差异填充 numpy 矩阵

r - Boggle作弊......呃......用R中的图表解决

algorithm - 如何生成由 `k` `0' s`和 `l` `1' s`组成的集合的所有排列,按字典顺序排列?

python - 小列表的长排列

python - Tensorflow 在每次 session 运行时创建一组新的已经存在的变量?

未调用 Python 父类(super class) __init__ 方法

python - 使用百分比计算 : decimal or readable?

python - 扩展 Python : process numpy arrays

python - python3.6 : socket. recv()vs socket.recv_into()性能

python - 如何检查 Mypy `# type: ignore` 评论是否仍然有效且需要?