Python 如何根据另一个列表筛选嵌套列表

Python 如何根据另一个列表筛选嵌套列表,python,tuples,filtering,list-comprehension,nested-lists,Python,Tuples,Filtering,List Comprehension,Nested Lists,我需要从每个外部元组的列表中的每个元组中获取以下列表,该列表由索引编号1过滤, 例如。。。我有以下清单 distances = [('highway_bost321', [0.0, 10.174343253183386, 10.947746706490813, 7.187637514988234, 7.660483562939873, 10.622402335214636, 10.737785768990813, 10.566917715980832, 10.819389772897063,

我需要从每个外部元组的列表中的每个元组中获取以下列表,该列表由索引编号1过滤, 例如。。。我有以下清单

  distances = [('highway_bost321', [0.0, 10.174343253183386, 10.947746706490813, 7.187637514988234, 7.660483562939873, 10.622402335214636, 10.737785768990813, 10.566917715980832, 10.819389772897063, 12.03400784892136]), ('mountain_0871', [10.947746706490813, 0.83758544921875, 0.0, 5.838234191502578, 5.363256367154217, 1.3175048828125, 3.0810546875, 6.634500456993904, 0.78460693359375, 13.91981431878607]), ('opencountry_043', [7.660483562939873, 4.668136048210366, 5.363256367154217, 2.8142531243329643, 0.0, 5.347678752303554, 3.236628762987552, 5.377074226549635, 5.634096535101808, 13.405988675235129]), ('opencountry_053', [10.622402335214636, 0.73712158203125, 1.3175048828125, 5.876377140065916, 5.347678752303554, 0.0, 3.1134033203125, 6.11476575647307, 1.97711181640625, 
13.144871284931902]), ('opencountry_123', [10.737785768990813, 3.01690673828125, 3.0810546875, 5.560564920669245, 3.236628762987552, 3.1134033203125, 0.0, 5.71620618616057, 3.09417724609375, 13.597874214619402]), ('palace_019', [10.566917715980832, 5.890665007775154, 6.634500456993904, 3.7392389463104037, 5.377074226549635, 6.11476575647307, 5.71620618616057, 0.0, 6.493675414476205, 12.731745772059295]), ('volcano_010', [10.819389772897063, 1.294677734375, 0.78460693359375, 5.709877257908828, 5.634096535101808, 1.97711181640625, 3.09417724609375, 6.493675414476205, 0.0, 13.90083238519232]), ('waterfall03', [12.03400784892136, 13.17207261956732, 13.91981431878607, 13.095577523116825, 13.405988675235129, 13.144871284931902, 13.597874214619402, 12.731745772059295, 13.90083238519232, 0.0])]
[('highway_bost321', [(10.174343253183386, 1), (10.947746706490813, 2), (7.187637514988234, 3), (7.660483562939873, 4), (10.622402335214636, 5), (10.737785768990813, 6), (10.566917715980832, 7), (10.819389772897063, 8), (12.03400784892136, 9)]),
('mountain_0871', [(10.947746706490813, 0), (0.83758544921875, 1), (5.838234191502578, 3), (5.363256367154217, 4), (1.3175048828125, 5), (3.0810546875, 6), (6.634500456993904, 7), (0.78460693359375, 8), (13.91981431878607, 9)]),
('opencountry_043', [(7.660483562939873, 0), (4.668136048210366, 1), (5.363256367154217, 2), (2.8142531243329643, 3), (5.347678752303554, 5), (3.236628762987552, 6), (5.377074226549635, 7), (5.634096535101808, 8), (13.405988675235129, 9)]),
('opencountry_053', [(10.622402335214636, 0), (0.73712158203125, 1), (1.3175048828125, 2), (5.876377140065916, 3), (5.347678752303554, 4), (3.1134033203125, 6), (6.11476575647307, 7), (1.97711181640625, 8), (13.144871284931902, 9)]),
('opencountry_123', [(10.737785768990813, 0), (3.01690673828125, 1), (3.0810546875, 2), (5.560564920669245, 3), (3.236628762987552, 4), (3.1134033203125, 5), (5.71620618616057, 7), (3.09417724609375, 8), (13.597874214619402, 9)]),
('palace_019', [(10.566917715980832, 0), (5.890665007775154, 1), (6.634500456993904, 2), (3.7392389463104037, 3), (5.377074226549635, 4), (6.11476575647307, 5), (5.71620618616057, 6), (6.493675414476205, 8), (12.731745772059295, 9)]),
('volcano_010', [(10.819389772897063, 0), (1.294677734375, 1), (0.78460693359375, 2), (5.709877257908828, 3), (5.634096535101808, 4), (1.97711181640625, 5), (3.09417724609375, 6), (6.493675414476205, 7), (13.90083238519232, 9)]),
('waterfall03', [(12.03400784892136, 0), (13.17207261956732, 1), (13.91981431878607, 2), (13.095577523116825, 3), (13.405988675235129, 4), (13.144871284931902, 5), (13.597874214619402, 6), (12.731745772059295, 7), (13.90083238519232, 8)])]
我已经编写了以下代码

medoids = [1, 3]
distances = [tuple((n, [(value, i) for i, value in enumerate(values) if i in medoids])) for n, values in distances]
这给了我第一个元素的错误,为什么我不知道,因为我正在过滤medoids列表中的元素 如果没有这样的过滤,我将得到以下列表

  distances = [('highway_bost321', [0.0, 10.174343253183386, 10.947746706490813, 7.187637514988234, 7.660483562939873, 10.622402335214636, 10.737785768990813, 10.566917715980832, 10.819389772897063, 12.03400784892136]), ('mountain_0871', [10.947746706490813, 0.83758544921875, 0.0, 5.838234191502578, 5.363256367154217, 1.3175048828125, 3.0810546875, 6.634500456993904, 0.78460693359375, 13.91981431878607]), ('opencountry_043', [7.660483562939873, 4.668136048210366, 5.363256367154217, 2.8142531243329643, 0.0, 5.347678752303554, 3.236628762987552, 5.377074226549635, 5.634096535101808, 13.405988675235129]), ('opencountry_053', [10.622402335214636, 0.73712158203125, 1.3175048828125, 5.876377140065916, 5.347678752303554, 0.0, 3.1134033203125, 6.11476575647307, 1.97711181640625, 
13.144871284931902]), ('opencountry_123', [10.737785768990813, 3.01690673828125, 3.0810546875, 5.560564920669245, 3.236628762987552, 3.1134033203125, 0.0, 5.71620618616057, 3.09417724609375, 13.597874214619402]), ('palace_019', [10.566917715980832, 5.890665007775154, 6.634500456993904, 3.7392389463104037, 5.377074226549635, 6.11476575647307, 5.71620618616057, 0.0, 6.493675414476205, 12.731745772059295]), ('volcano_010', [10.819389772897063, 1.294677734375, 0.78460693359375, 5.709877257908828, 5.634096535101808, 1.97711181640625, 3.09417724609375, 6.493675414476205, 0.0, 13.90083238519232]), ('waterfall03', [12.03400784892136, 13.17207261956732, 13.91981431878607, 13.095577523116825, 13.405988675235129, 13.144871284931902, 13.597874214619402, 12.731745772059295, 13.90083238519232, 0.0])]
[('highway_bost321', [(10.174343253183386, 1), (10.947746706490813, 2), (7.187637514988234, 3), (7.660483562939873, 4), (10.622402335214636, 5), (10.737785768990813, 6), (10.566917715980832, 7), (10.819389772897063, 8), (12.03400784892136, 9)]),
('mountain_0871', [(10.947746706490813, 0), (0.83758544921875, 1), (5.838234191502578, 3), (5.363256367154217, 4), (1.3175048828125, 5), (3.0810546875, 6), (6.634500456993904, 7), (0.78460693359375, 8), (13.91981431878607, 9)]),
('opencountry_043', [(7.660483562939873, 0), (4.668136048210366, 1), (5.363256367154217, 2), (2.8142531243329643, 3), (5.347678752303554, 5), (3.236628762987552, 6), (5.377074226549635, 7), (5.634096535101808, 8), (13.405988675235129, 9)]),
('opencountry_053', [(10.622402335214636, 0), (0.73712158203125, 1), (1.3175048828125, 2), (5.876377140065916, 3), (5.347678752303554, 4), (3.1134033203125, 6), (6.11476575647307, 7), (1.97711181640625, 8), (13.144871284931902, 9)]),
('opencountry_123', [(10.737785768990813, 0), (3.01690673828125, 1), (3.0810546875, 2), (5.560564920669245, 3), (3.236628762987552, 4), (3.1134033203125, 5), (5.71620618616057, 7), (3.09417724609375, 8), (13.597874214619402, 9)]),
('palace_019', [(10.566917715980832, 0), (5.890665007775154, 1), (6.634500456993904, 2), (3.7392389463104037, 3), (5.377074226549635, 4), (6.11476575647307, 5), (5.71620618616057, 6), (6.493675414476205, 8), (12.731745772059295, 9)]),
('volcano_010', [(10.819389772897063, 0), (1.294677734375, 1), (0.78460693359375, 2), (5.709877257908828, 3), (5.634096535101808, 4), (1.97711181640625, 5), (3.09417724609375, 6), (6.493675414476205, 7), (13.90083238519232, 9)]),
('waterfall03', [(12.03400784892136, 0), (13.17207261956732, 1), (13.91981431878607, 2), (13.095577523116825, 3), (13.405988675235129, 4), (13.144871284931902, 5), (13.597874214619402, 6), (12.731745772059295, 7), (13.90083238519232, 8)])]
我得到的

   [('highway_bost321', [(7.187637514988234, 3)]), 
    ('mountain_0871', [(0.83758544921875, 1), (5.838234191502578, 3)]),
    ('opencountry_043', [(2.8142531243329643, 3), (4.668136048210366, 1)]),
    ('opencountry_053', [(0.73712158203125, 1), (5.876377140065916, 3)]),
    ('opencountry_123', [(3.01690673828125, 1), (5.560564920669245, 3)]),
    ('palace_019', [(3.7392389463104037, 3), (5.890665007775154, 1)]),
    ('volcano_010', [(1.294677734375, 1), (5.709877257908828, 3)]),
    ('waterfall03', [(13.095577523116825, 3), (13.17207261956732, 1)])]
我想要什么

   [('highway_bost321', [(10.174343253183386, 1), (7.187637514988234, 3)]), 
    ('mountain_0871', [(0.83758544921875, 1), (5.838234191502578, 3)]),
    ('opencountry_043', [(2.8142531243329643, 3), (4.668136048210366, 1)]),
    ('opencountry_053', [(0.73712158203125, 1), (5.876377140065916, 3)]),
    ('opencountry_123', [(3.01690673828125, 1), (5.560564920669245, 3)]),
    ('palace_019', [(3.7392389463104037, 3), (5.890665007775154, 1)]),
    ('volcano_010', [(1.294677734375, 1), (5.709877257908828, 3)]),
    ('waterfall03', [(13.095577523116825, 3), (13.17207261956732, 1)])]

如果您已经知道要从列表中选择的索引(我假设该索引是
medoids
),则无需枚举。然后嵌套列表,从列表中选择第一个元素和特定元素

medoids = [1, 3]

out = [(i[0],[(i[1][x], x) for x in medoids]) for i in distances]

>> [('highway_bost321', [(10.174343253183386, 1), (7.187637514988234, 3)]),
 ('mountain_0871', [(0.83758544921875, 1), (5.838234191502578, 3)]),
 ('opencountry_043', [(4.668136048210366, 1), (2.8142531243329643, 3)]),
 ('opencountry_053', [(0.73712158203125, 1), (5.876377140065916, 3)]),
 ('opencountry_123', [(3.01690673828125, 1), (5.560564920669245, 3)]),
 ('palace_019', [(5.890665007775154, 1), (3.7392389463104037, 3)]),
 ('volcano_010', [(1.294677734375, 1), (5.709877257908828, 3)]),
 ('waterfall03', [(13.17207261956732, 1), (13.095577523116825, 3)])]
编辑

话虽如此,您的原始解决方案也应该有效,尽管使用了tuple的其他方法。尝试重命名变量,以确保不会运行两次

medoids = [1, 3]
out = [tuple((n, [(value, i) for i, value in enumerate(values) if i in medoids])) for n, values in distances]

out
>>[('highway_bost321', [(10.174343253183386, 1), (7.187637514988234, 3)]),
 ('mountain_0871', [(0.83758544921875, 1), (5.838234191502578, 3)]),
 ('opencountry_043', [(4.668136048210366, 1), (2.8142531243329643, 3)]),
 ('opencountry_053', [(0.73712158203125, 1), (5.876377140065916, 3)]),
 ('opencountry_123', [(3.01690673828125, 1), (5.560564920669245, 3)]),
 ('palace_019', [(5.890665007775154, 1), (3.7392389463104037, 3)]),
 ('volcano_010', [(1.294677734375, 1), (5.709877257908828, 3)]),
 ('waterfall03', [(13.17207261956732, 1), (13.095577523116825, 3)])]