Один простой подход заключается в следующем:
>>> finger_names, finger_lengths
(('pointer', 'ring', 'pinky', 'middle', 'thumb'), (12, 13, 6, 15, 7))
>>> s_tuples = sorted(zip(finger_names, finger_lengths), key=lambda x: x[1])
>>> finger_names, finger_lengths = zip(*s_tuples)
>>> finger_names, finger_lengths
(('pinky', 'thumb', 'pointer', 'ring', 'middle'), (6, 7, 12, 13, 15))
Однако, Ник прав, что вам, вероятно, следует связать их в структуре данных, а не в зависимости от их порядка связывать их.
Вышеприведенная стратегия (с использованием key
) все еще работает в этом случае, но вам не нужно использовать zip(*s_tuples)
, чтобы разъединить их.
С другой стороны, если вы хотите отсоединить их, есть решение с одной строкой, о котором я забыл раньше.
finger_lengths, finger_names = zip(*sorted(zip(finger_lengths, finger_names)))
Или, если вы хотите выполнить сортировку на месте, сохраняя одну операцию копирования:
s_tuples = zip(finger_lengths, finger_names)
s_tuples.sort()
finger_lengths, finger_names = zip(*temp)