Python:多个 if 条件取决于参数

标签 python numpy dictionary if-statement scipy

我遇到以下问题。我有一个参数 frc_size。根据 fcr_size 的大小,必须在 if 条件中检查更多距离。有没有一种方法可以巧妙地处理并缩短所有这些表达式?例如,对于 fcr_size = 3,if 条件如下所示:

minusscore = 2

for coords in full_box:
    mindist = float("inf")
    for m in range(len(lineSegmentPairs[0])):
        newdist = dist(lineSegmentPairs[0][m], lineSegmentPairs[1][m], coords)
        if newdist<mindist:
            mindist=newdist
    if mindist <= radius :
        val1 = int(sparse1.get(coords,"0")[0]) - minusscore
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +1) :
        val1 = int(sparse1.get(coords,"0")[0]) + 3
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +2) :
        val1 = int(sparse1.get(coords,"0")[0]) + 2
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +3) :
        val1 = int(sparse1.get(coords,"0")[0]) + 1
        sparse1[coords] = [str(val1)]
    elif mindist > (radius +3) :
        continue

但如果 fcr_size 为 4,则需要附加 if 条件,例如:

minusscore = 2

for coords in full_box:
    mindist = float("inf")
    for m in range(len(lineSegmentPairs[0])):
        newdist = dist(lineSegmentPairs[0][m], lineSegmentPairs[1][m], coords)
        if newdist<mindist:
            mindist=newdist
    if mindist <= radius :
        val1 = int(sparse1.get(coords,"0")[0]) - minusscore
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +1) :
        val1 = int(sparse1.get(coords,"0")[0]) + 4
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +2) :
        val1 = int(sparse1.get(coords,"0")[0]) + 3
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +3) :
        val1 = int(sparse1.get(coords,"0")[0]) + 2
        sparse1[coords] = [str(val1)]
    elif mindist <= (radius +4) :
        val1 = int(sparse1.get(coords,"0")[0]) + 1
        sparse1[coords] = [str(val1)]
    elif mindist > (radius +4) :
        continue

最佳答案

也许是这样的?

if mindist <= radius:
  val1 = int(sparse1.get(coords,"0")[0]) - minusscore
  sparse1[coords] = [str(val1)]
elif mindist > (radius + fcr_size):
  continue
else:
  for i in range(fcr_size):
    if mindist <= radius + i + 1:
      val1 = int(sparse1.get(coords,"0")[0]) + (fcr_size - i)
      sparse1[coords] = [str(val1)]
      break

关于Python:多个 if 条件取决于参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44680240/

相关文章:

python - 将两个列表与键和值组合成一个字典并转换为数据框

python - 如何删除两列之间的重复项,但在各自的列中保留唯一值?

python - C API 中 Numpy datetime64 的转换

python - 无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)- 已经将数据转换为 numpy 数组

java - 从 Map<String,String> 获取 3 个最高值

python - 将字典附加到列表 - 我看到类似行为的指针

python - 在 Python 中使用 '__rsub__' 方法的典型实例是什么?

python - 如何使用 Python 将 FlatBuffer 消息从二进制格式转换为人类可读的文本格式?

python - PyTorch:不一致的预训练 VGG 输出

python - Numpy:将数组列表与另一个数组组合(np.choose 替代方案)