我有这两个功能:
def comparison(a, b):
return [-1, 0, 1].index(cmp(b, a))
def base_3(seq):
return [comparison(a, b) for a, b in itertools.combinations(seq, 2)]
函数比较返回一个基于此的比较数:
- 如果 a > b,则为 0
- 如果 a = b,则为 1
- 2 如果
函数base_3返回所有组合元素之间的比较。
例如:
x = [0, 1, 2]
y = [1, 2, 0]
z = [0, 1, 0]
>>> base_3(x)
[2, 2, 2]
>>> base_3(y)
[2, 0, 0]
>>> base_3(z)
[2, 1, 0]
如果可能的话,我需要一个从给定的 base_3 返回序列的函数:
>>> base_3_to_seq([2, 2, 2])
[0, 1, 2]
>>> base_3_to_seq([2, 1, 0])
[0, 1, 0]
>>> base_3_to_seq([0, 2, 1])
"Impossible"
如何编写这个函数base_3_to_seq?
最佳答案
这是一种暴力方式:
def base_3_to_seq(base3):
for seq in itertools.product(range(3), repeat=3):
if base_3(seq) == base3:
return seq
return "Impossible"
根据您最常用的调用方式,您可以通过记住 base_3 或 base_3_to_seq 来加快长时间运行的代码速度。
关于Python 序列元素比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10143499/