如何根据条件从列表中获取元素及其索引?

时间:2019-06-04 13:46:45

标签: python list filtering enumeration

我有一个具有重复值的列表,我找到了最大长度的列表,但是我想获取这些最大列表的索引并将它们添加到我的索引列表中。

mylist = [{'destination', 'graph'}, {'vertex'}, {'destination', 'modify'}, {'destination', 'modify'}, {'modify', 'return'}, {'destination'}]

max_len = len(sorted(mylist, key=lambda x: len(x), reverse=True)[0])
uniq_list = [k for k in mylist if len(k) == max_len]
print(uniq_list)

当前输出:

[{'destination', 'graph'}, {'destination', 'modify'}, {'destination', 'modify'}, {'modify', 'return'}]

预期输出:

[{'destination', 'graph'}, {'destination', 'modify'}, {'destination', 'modify'}, {'modify', 'return'}]
index_list = [0,2,3,4]

1 个答案:

答案 0 :(得分:1)

使用enumerate将子列表和索引都保留在元组中,并用zip解压缩它们:

out = ((ix, k) for ix, k in enumerate(mylist) if len(k) == max_len)
index_list , uniq_list = zip(*out)

print(index_list)
# (0, 2, 3, 4)

print(uniq_list)
#({'graph', 'destination'}, {'modify', 'destination'}, 
# {'modify', 'destination'}, {'modify', 'return'})