拆分列表并从两个集合中打印出最小值(不包括零)



我有一个包含9个浮点值的列表,我想取前5个,检查它们是否等于零,然后取最后4个,检查它们是否等于零。如果(前5和后4)都等于零,我想打印[None, None]。如果它们不等于0,那么我要打印2个最小值,每组一个。如果只有前5个值是零,那么我想打印None,然后打印最后4个的最小值,反之亦然。

a = [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]

输出:

[None, None]

a = [0.0,0.0,0.0,0.0,0.0,3.0567,0.55,7.678,9.678]

输出:

[none, 0.55]
def array_process(arr):
   f5 = [x for x in arr[:5] if x > 0]
   l4 = [x for x in arr[-4:] if x > 0] 
   return min(f5) if f5 else None, min(l4) if l4 else None
a = [0.0,0.0,0.0,0.0,0.0,3.0567,0.55,7.678,9.678]
print(array_process(a))

输出:

(None, 0.55)

这里有一个简单的解决方案来满足您的标准:

def array_process(arr):
    first = arr[:5]
    second = arr[5:]
    if first.count(0.0) == 5 and second.count(0.0) == 4:
        return [None, None]
    elif first.count(0.0) == 5:
        return [None, min(second)]
    elif second.count(0.0) == 4:
      return [min(first), None]
    else:
        return [min(first), min(second)]
print(array_process([0.0,0.0,0.0,0.0,0.0,3.0567,0.55,7.678,9.678]))

输出:

[None, 0.55]

切片将允许您获得列表的前5个和后4个:

a = [0.0,0.0,0.0,0.0,0.0,3.0567,0.55,7.678,9.678]
first_five = a[:5]
last_four = a[-4:]

然后你可以计算每个min:

result = [min(first_five), min(last_four)]

最后将0替换为None:

for i in range(2):
  if result[i] == 0:
    result[i] = None

你可以:

print(result)

得到你的结果

最新更新