从较大的列表列表中提取列表列表

2024-05-15 02:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

从以下列表中,我试图从最大的列表中提取两个列表,如下所示:

第一个将包含距离零lol[2]最远的值,给定键lol[0]

第二个将包含距离零LOL[3]最远的值,给定键LOL[0]

                          #Mx1      #Mx2  
lol = [['1', 'Peter'   , -104.08,   36.85],
       ['1', 'Apolonia',  629.58,-1103.34],
       ['1', 'Laplace' , 1032.51,  169.48],
       ['1', 'Werner'  , -308.18, -121.48],
       ['3', 'Peter'   , -987.18,  142.02],
       ['3', 'Apolonia',-1153.71,   -8.32],
       ['3', 'Laplace' ,  -88.08,  -13.65],
       ['3', 'Carl'    , -139.34, 1531.84],
       ['6', 'Daniel'  ,   141.7,  -535.2],
       ['6', 'Danilo'  ,   14.77,   55.82],
       ['6', 'Milo'    ,    74.6,    28.5]]


for i, j in enumerate(lol[:-1]):
    
    print(j[0])
    print(lol[i+1][0])
    
    if j[0] == lol[i+1][0]:
        
        pass

结果应该是这样的:

Mx1 = [[‘1’,’Laplace’, 1032.51],
[‘3’,’Apolonia’, -1153.71],
[‘6’,’Daniel’, 141.70]]

Mx2 = [[‘1’,’Apolonia’, -1103.54],
[‘3’,’Carl’, 1531.84],
[‘6’,’Daniel’, -535.2]]

我将非常感谢这个问题的反馈及其逻辑、诚挚的问候


Tags: 距离列表peterprintdaniellollaplacecarl
2条回答

这是一个使用^{}并了解许多python库函数的key参数的好地方(请参见^{}以获取示例)

import itertools

def get_extremes_by_key(lol, key_idx, val_idx):
    results = []
    for group in itertools.groupby(lol, key=lambda lst: lst[key_idx]):
        extreme = max(group[1], key=lambda lst: abs(lst[val_idx]))
        results.append(extreme)
    return results

mx1 = get_extremes_by_key(lol, 0, 2)
mx2 = get_extremes_by_key(lol, 0, 3)

塞进一个内衬中,它可能看起来像这样:

import itertools

mx1 = [max(group[1], key=lambda x: abs(x[2]))
          for group in itertools.groupby(lol, key=lambda x: x[0])]
mx2 = [max(group[1], key=lambda x: abs(x[3]))
          for group in itertools.groupby(lol, key=lambda x: x[0])]

print(mx1)
print(mx2)

### output

[['1', 'Laplace', 1032.51, 169.48],
 ['3', 'Apolonia', -1153.71, -8.32],
 ['6', 'Daniel', 141.7, -535.2]]

[['1', 'Apolonia', 629.58, -1103.34],
 ['3', 'Carl', -139.34, 1531.84],
 ['6', 'Daniel', 141.7, -535.2]]

尝试:

lol = [
    ["1", "Peter", -104.08, 36.85],
    ["1", "Apolonia", 629.58, -1103.34],
    ["1", "Laplace", 1032.51, 169.48],
    ["1", "Werner", -308.18, -121.48],
    ["3", "Peter", -987.18, 142.02],
    ["3", "Apolonia", -1153.71, -8.32],
    ["3", "Laplace", -88.08, -13.65],
    ["3", "Carl", -139.34, 1531.84],
    ["6", "Daniel", 141.7, -535.2],
    ["6", "Danilo", 14.77, 55.82],
    ["6", "Milo", 74.6, 28.5],
]

tmp1, tmp2 = {}, {}
for a, b, c, d in lol:
    if a not in tmp1 or abs(tmp1[a][2]) < abs(c):
        tmp1[a] = [a, b, c]

    if a not in tmp2 or abs(tmp1[a][2]) < abs(d):
        tmp2[a] = [a, b, d]

mx1 = list(tmp1.values())
mx2 = list(tmp2.values())

print(mx1)
print(mx2)

印刷品:

[["1", "Laplace", 1032.51], ["3", "Apolonia", -1153.71], ["6", "Daniel", 141.7]]

[["1", "Apolonia", -1103.34], ["3", "Carl", 1531.84], ["6", "Daniel", -535.2]]

相关问题 更多 >

    热门问题