【发布时间】:2021-07-28 13:15:17
【问题描述】:
我想列出一个 n 元素组可能的所有关联操作。例如,当 n=3 时,我希望它打印:
a*(a*a) = (a*a)*a
a*(a*b) = (a*a)*b
a*(a*c) = (a*a)*c
... 24 more lines
现在,我最好的尝试是生成以下 python3 代码。
import itertools as it
def permutation_func(str_, rep):
chars = list(str_)
results = []
for tuple_ in it.product(chars, repeat = rep):
i = ''.join(tuple_)
results.append(i)
return results
my_list = permutation_func('abc', 3)
for i in my_list:
print(i, " = ", i)
但是,我得到的输出是:
aaa = aaa
aab = aab
aac = aac
... and 24 more lines
我认为我在正确的轨道上。但我无法弄清楚如何将aaa = aaa 转换为a*(a*a) = (a*a)*a,基本上我需要在文本中多次插入* 符号和括号。
我试过谷歌搜索,我发现我需要正则表达式来做到这一点。但是,我从未使用过正则表达式。所以我正在寻找一种不使用正则表达式的替代方法。我什至不知道没有正则表达式是否可行。如果不是,请告诉我。
【问题讨论】:
-
请为 n=4 或更多添加一些示例?我想这些情况下的括号可能是多个集合,例如
(a * b * c) * d或(a * b) * (c * d)或a * (b * c) * d或a * (b * c * d),所有这些都是相等的。 -
嗨@AKS,您的问题更像是代数问题。不管怎样,我怕你弄错了。对于 n=4,前 3 行将与 n=3 相同,但第四行将是 a* (a * d) =(a * a) * d。这里是二元运算,二元运算的结合性是这样定义的。例如,你的 (abc) 没有任何意义,除非它是一个三元运算符并且你的符号是这样表达的。否则,n=3 和 n=4 之间的区别在于 n=4 将有 64 行而不是 27 行。
-
我明白了,所以可以肯定地说,不管字符串中有多少元素,比如
abc或abcd,您总是生成 3 个字符的排列吗? -
是的。确切地。这就是关联性!
标签: python regex permutation