Как я могу получить оба элемента и их индексы из списка на основе условия? - PullRequest
1 голос
/ 04 июня 2019

У меня есть список с повторяющимися значениями, я нашел списки максимальной длины, но я хотел бы получить индексы этих максимальных списков и добавить их в свой список индексов.

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 Ответ

1 голос
/ 04 июня 2019

Используйте 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'})
...