Получение индексов (или значений) с помощью понимания списка легко:
In [33]: [i for i,v in enumerate(scores) if v>5]
Out[33]: [2, 4]
Мы можем получить оба, как список кортежей с:
In [34]: [(i,v) for i,v in enumerate(scores) if v>5]
Out[34]: [(2, 9.67), (4, 6.7)]
Тогда мы можем использовать идиому zip*
, чтобы «транспонировать» этот список:
In [35]: list(zip(*_))
Out[35]: [(2, 4), (9.67, 6.7)]
Или упаковав все в одно выражение с распаковкой:
In [36]: v,x = tuple(zip(*((i,v) for i,v in enumerate(scores) if v>5)))
In [37]: v
Out[37]: (2, 4)
In [38]: x
Out[38]: (9.67, 6.7)
На первый взгляд, получить несколько списков из понимания списка сложно, но это zip * транспонирование позаботится об этом.