如何通过它们的第二个值将第二低的列表找到到嵌套列表中?

Abd*_*ran 3 python list nested-lists python-3.x

这里给出了一个嵌套列表:

nl = [['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]
Run Code Online (Sandbox Code Playgroud)

现在我必须通过它们的第二个值在嵌套列表中找到第二低的列表。并将第二低的列表附加到另一个列表中。

所以输出应该是:

['Harsh', 20], ['Beria', 20]
Run Code Online (Sandbox Code Playgroud)

我写了以下代码但它不起作用:

nl = [['Harsh', 20], ['Beria', 20], ['Varun', 19], ['Kakunami', 19], ['Vikas', 21]]

result=[]

temp=max(nl, key=lambda x: x[1])

largest, larger = temp[1], temp[1]
for num in nl:
    if num[1] < largest:
        largest, larger = num[1], largest
    elif num[1] < larger:
        larger = num[1]
        result.append(larger)
print(result)
Run Code Online (Sandbox Code Playgroud)

Pad*_*ham 8

获取min总元素的 ,使用有效的过滤器然后获取剩余的最小值并保持元素等于剩余的最小值:

from operator import itemgetter
# min of all elements
mn = min(nl, key=itemgetter(1))[1]

# remove elements equal to min
filtered = [x for x in nl if x[1] != mn]

# get min of remaining
mn_fil = min(filtered,key=itemgetter(1))[1]

# filter remaining
out = [x for x in filtered if x[1] == mn_fil]
print(out)

[['Harsh', 20], ['Beria', 20]]
Run Code Online (Sandbox Code Playgroud)

适用于您的两种情况:

In [19]: nl = [['Prashant', 32], ['Pallavi', 36], ['Dheeraj', 39], ['Shivam', 40]]    
In [20]: from operator import itemgetter    
In [21]: mn = min(nl, key=itemgetter(1))[1]    
In [22]: filtered = [x for x in nl if x[1] != mn]    
In [23]: mn_fil = min(filtered,key=itemgetter(1))[1]    
In [24]: out = [x for x in filtered if x[1] == mn_fil]    
In [25]: out
Out[25]: [['Dheeraj', 36]]
Run Code Online (Sandbox Code Playgroud)

如果找到较低的元素,则使用单个 for 循环从临时列表中删除所有元素,如果我们找到并且同样较低的元素,则将其附加:

mn = min(nl, key=itemgetter(1))[1]
temp = []
best = float("inf")
for ele in nl:
    if mn < ele[1] < best:
        best = ele[1]
        temp = []
        out.append(ele)
    elif ele[1] == best:
        temp.append(ele)
print(temp)
Run Code Online (Sandbox Code Playgroud)