如何获取基于另一个列表过滤的嵌套列表

时间:2021-05-04 03:31:16

标签: 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, 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])]

我写了以下代码

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

这给了我第一个元素的错误,为什么我不知道,因为我正在过滤 medoids 列表 [1,3] 中的元素,下面是一段代码 if i in medoids 如果没有这样的过滤,我会得到以下列表

[('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)])]

2 个答案:

答案 0 :(得分:1)

medoids = [1, 3]
filtered_lst = [
    (n, [(values[m], m) for m in medoids])
    for n, values in distances
]

答案 1 :(得分:0)

如果您已经知道我假设的列表中的哪个索引是 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)])]

编辑

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

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)])]
相关问题