Python 序列元素比较

标签 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. 如果 a > b,则为 0
  2. 如果 a = b,则为 1
  3. 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/

相关文章:

arrays - Erlang 数组与列表

python - opencv imwrite中的色度子采样

c# - 复制列表中的更改

python - 列表中的第一个数字变量不大于

android - 列表对话框中的图标

algorithm - 电梯算法与最短寻道时间优先 (SSF) 算法

mysql - 基于 select 进行更新以查找重复且小于

python - PIL 缩略图正在旋转我的图像?

python - Flask 中的数据库迁移 - sqlalchemy

python - 文件出现在目录中的速度比我处理它们的速度快(pyinotify)