python - 如何在列表中找到第二小的 UNIQUE 数字?

标签 python

我需要创建一个函数来返回第二小的唯一数字,这意味着如果
list1 = [5,4,3,2,2,1],我需要返回 3,因为 2 不是唯一的。

我试过:

def second(list1):
    result = sorted(list1)[1]
    return result

def second(list1):
    result = list(set((list1)))
    return result

但他们都返回 2。

编辑1:

谢谢大家!我使用这个最终代码让它工作:

def second(list1):
    b = [i for i in list1 if list1.count(i) == 1]
    b.sort()
    result = sorted(b)[1]
    return result

编辑 2:

好吧,伙计们……真的很困惑。我的教授刚刚告诉我,如果 list1 = [1,1,2,3,4],它应该返回 2,因为 2 仍然是第二小的数字,如果 list1 = [1 ,2,2,3,4],它应该返回 3。 如果 list1 = [1,1,2,3,4],eidt1 中的代码将无法工作。 我想我需要做类似的事情:

如果 list1[0] 位置有重复数字,则删除所有重复数字并返回第二个数字。 否则,如果重复数字位置不在 list1[0] 中,则只需使用 EDIT1 中的代码。

最佳答案

不使用任何花哨的东西,为什么不直接获取唯一列表,对其进行排序,然后获取第二个列表项?

a = [5,4,3,2,2,1] #second smallest is 3
b = [i for i in a if a.count(i) == 1]
b.sort()
>>>b[1]
3


a = [5,4,4,3,3,2,2,1] #second smallest is 5
b = [i for i in a if a.count(i) == 1]
b.sort()
>>> b[1]
5

显然,您应该测试您的列表中至少有两个唯一数字。换句话说,确保 b 的长度至少为 2。

关于python - 如何在列表中找到第二小的 UNIQUE 数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34147836/

相关文章:

python - 如何检查输入的字母是否在列表中?

python日志查看应用

Java 相当于 Python 中的函数映射

Python 二维数组的行为很奇怪

python - wxgrid 单元格渲染器设置列大小

python - Yellowbrick Visualiser.fit() 引发 ValueError

python - Azure 数字孪生 Python API - 创建了模型孪生,但无法检索它

python - 在另一条线的一点上绘制固定长度的垂直线

python - 反转 numpy 数组中键的随机选择

python - 如何从 3D 多边形制作高程模型?