python - 如何找到列表中第二低和第二高的元素?
问题描述
因此,该函数可以正常工作,但列表中 min2(第二个最低值)的输出不正确。我似乎找不到解决方案。 Python 3.8.6
def max2min2(list1):
max1=list1[0]
min1=list1[0]
max2=None
min2=None
for item in list1:
if item>max1:
max2=max1
max1=item
elif max2==None or max2<item:
max2=item
if item<min1:
min2=min1
min1=item
elif min2==None or min2>item:
min2=item
return max2,min2
list1 = [1,2,3]
max2,min2=max2min2(list1)
print(min2,max2) # 1 2
用简单的输入列表[1,2,3]
输出maxmin2
是(1,2)
,虽然预期的输出是(2,2)
。
解决方案
现在,如果不需要对速度进行优化,简单的方法就是取一组数字,对它们进行排序,然后从每一端取第二个元素:
vals = [1,1,3,2,2]
filtered_vals = sorted(set(vals))
接着
# Second lowest
In [37]: filtered_vals[1]
Out[37]: 2
# Second highest
In [36]: filtered_vals[-2]
Out[36]: 2
如果需要,添加一些异常和特殊情况处理。
推荐阅读
- jquery - 两个表之间的响应箭头
- kubernetes - 如何从 Istio 应用程序连接到集群本地 RabbitMQ Kubernetes 服务
- windows - 可启动设备的序列号
- angular - Angular 7:ngClass 只取初始值
- jupyter-notebook - 有没有办法创建一个可以“自动更正”用户输入的笔记本?
- angular - angular 6 和 bootstrap 3 应用程序中的动态主题切换?
- google-cloud-platform - 无法在 Google Cloud Compute Engine 上使用 GPU
- python - 如何在 JSON DUMP 脚本中恢复并将其放入变量中
- c++ - Mqtt“软件导致连接中止”错误
- ansible - 如何用ansible更改网络接口的名称?