Python序列元素比较

时间:2012-04-13 15:12:24

标签: python list comparison sequence

我有这两个功能:

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)]

函数比较基于此返回比较数:

  1. 0如果> B'/ LI>
  2. 1如果a = b
  3. 2如果< B'/ LI>

    函数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?

1 个答案:

答案 0 :(得分:2)

这是一种蛮力的方式:

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来加快长时间运行的代码。