从列表中获取第二个最小值

时间:2018-09-29 18:00:06

标签: python

feature-X

我在这里要做的是首先从列表中找到最小的数字。并删除该最小值,然后从列表中再次找到最小的数字。但是删除功能不起作用

6 个答案:

答案 0 :(得分:0)

这会找到列表中每个子列表中第二小的子列表:

lst = [[1,2,3,4],[4,5,0,1],[22,21,31,10]] 

print([sorted(x)[1] for x in lst])
# [2, 1, 21]

您只需要按升序对子列表进行排序并选择第二个值即可。无需从列表中删除值。

答案 1 :(得分:0)

我个人会使用内置的sorted函数:

def second_min(x):
    result = []
    for sublist in x:
        result.extend(sublist)
    # this flattens the sublists
    # into a single list
    result = sorted(result)
    return result[1]
    # return the second element

如果没有内置的,请将sorted()调用替换为:

...
for i in range(len(result) - 1):
    if result[i] > result[i + 1]:
        result[i:i + 2] = [result[i + 1], result[i]]
...

答案 2 :(得分:0)

要查找每个子列表的最小值,您可以执行以下操作:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
    let  dict = array[indexPath.row]

    cell.lab.text = dict["name"] as! String
    let status:Bool = dict["status"] as! Bool
    cell.index     =  indexPath.row


    if(status == true){
        cell.btn.setImage(UIImage(named: "checked"), for: .normal)
    }else{
       cell.btn.setImage(UIImage(named: "unchecked"), for: .normal)
    }

    cell.delegate = self



    return cell
}

答案 3 :(得分:0)

使用min(iterable)和列表理解来获取整体最小值。

然后在同一列表组合上使用min,但要稍作改动:仅允许第二个列表组合中的值大于最小最小值:

<p:dataTable value="#{yourBean.humans.stream().filter(human -> human.getGender().equals('men')).toList()}" ...>

输出:

xxxx = [[1,2,3,4],[4,5,0,1],[22,21,31,10]]

minmin = min((x for y in xxxx for x in y)) # flattening list comp
secmin = min((x for y in xxxx for x in y if x >minmin))

print(minmin,secmin)

答案 4 :(得分:0)

您可以将给定的数据结构转换为单个列表,然后对列表进行排序。前两个元素为您提供所需的答案。您可以执行以下操作:

input_list = x
new_l = []
for sl in input_list:
    new_l.extend(sl)
new_l.sort()

# First two elements of new_l are the ones that you want.

答案 5 :(得分:0)

remove_smallest = [sorted(i)[1:] for i in x]
get_smallest = [min(i) for i in remove_smallest]

print(remove_smallest)
print(get_smallest)
[[2, 3, 4], [1, 4, 5], [21, 22, 31]]
[2, 1, 21]

扩展循环:

remove_smallest = []
for i in x:
    remove_smallest.append(sorted(i)[1:])

get_smallest = []
for i in remove_smallest:
    get_smallest.append(min(i))