Вы можете использовать zip для сортировки списков, вам просто нужна ключевая функция, которая может интерпретировать пары.Затем, как только вы отсортируете пары, вы можете распаковать их, используя zip
B = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
A = [['X', 'Y'], ['X'], ['X', 'Y', 'Z'], ['X', 'Y', 'Z'], ['X'], ['X', 'Y', 'Z'], ['X', 'Y']]
def lenRight(pair):
return len(pair[1])
C = sorted(zip(B,A), key = lenRight)
B_sorted, A_sorted = zip(*C)
print(B_sorted)
print(A_sorted)
Это выдаст:
('B', 'E', 'A', 'G', 'C', 'D', 'F')
(['X'], ['X'], ['X', 'Y'], ['X', 'Y'], ['X', 'Y', 'Z'], ['X', 'Y', 'Z'], ['X', 'Y', 'Z'])
РЕДАКТИРОВАТЬ:
Теперь я понимаю,
steps = [1, 3, 5]
B = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
A = [['X', 'Y'], ['X'], ['X', 'Y', 'Z'], ['X', 'Y', 'Z'], ['X'], ['X', 'Y', 'Z'], ['X', 'Y']]
lastStep = 0
sortedLists = []
def lenRight(pair):
return len(pair[1])
for step in steps:
C = sorted(zip(B[lastStep:lastStep+step],A[lastStep:lastStep+step]), key = lenRight, reverse = True)
B_sorted, A_sorted = zip(*C)
sortedLists.append((A_sorted, B_sorted))
lastStep = step
for pair in sortedLists:
A_sort, B_sort = pair
print(A_sort, B_sort)
Выходы:
(['X', 'Y'],) ('A',)
(['X', 'Y', 'Z'], ['X', 'Y', 'Z'], ['X']) ('C', 'D', 'B')
(['X', 'Y', 'Z'], ['X', 'Y', 'Z'], ['X', 'Y'], ['X']) ('D', 'F', 'G', 'E')