首页 > 解决方案 > 从更大的列表列表中提取列表列表

问题描述

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

第一个将包含离零最远的值 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]]

我将非常感谢这个问题的反馈及其逻辑,亲切的问候。

标签: pythonpython-3.xlist

解决方案


尝试:

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]]

推荐阅读