Упорядочение по индексу в pyhton

#python #algorithm

#python #алгоритм

Вопрос:

У меня есть 3 list таких

 A = [3,8,10,25] B = [14,15,30,23] C = [24,27,31,34]
 

Мне нужно объединить эти 3 списка, затем отсортировать их и снова создать 3 списка
с их индексами в python

 A = [1,2,3,8] B = [4,5,9,6] C = [7,10,11,12]
 

Комментарии:

1. каковы ваши усилия? где вы сталкиваетесь с проблемами, каков желаемый результат?

2. @sahasrara62 Желаемый результат — это три отсортированных списка A = [1,2,3,8] B = [4,5,9,6] C = [7,10,11,12] , как вы можете видеть из сообщения.

3. Не могли бы вы подробнее рассказать о том, как разные списки связаны друг с другом? Например, у вас есть C=[24,27,31,34] , но я не вижу его нигде в вашем желаемом выводе.

4. когда я объединяю и сортирую эти списки, в этом выводе, который я хочу C = [7,10,11,12] , 7 имеет индекс 24 C = [24,27,31,34]

Ответ №1:

Это запутанный вопрос. Тем не менее, я думаю, что нашел ответ. Что вам нужно сделать, это сначала создать второй, отсортированный список, который объединяет A, B и C. Затем вам нужно проверить, куда попадает каждый элемент в списке в объединенном списке, если это имеет смысл.

Попробуйте это:

 A = [3,8,10,25]
B = [14,15,30,23]
C = [24,27,31,34]

combined = sorted(A   B   C)
print(combined)

a = []
b = []
c = []

def order(origin_lst, new_lst):
    for i in origin_lst:
        new_lst.append(combined.index(i)   1)
    return new_lst

a = order(A, a)
b = order(B, b)
c = order(C, c)

print(a, b, c)
 

Вы получаете вывод: [1, 2, 3, 8] [4, 5, 10, 6] [7, 9, 11, 12] который выглядит правильно для меня.

Комментарии:

1. Все в порядке, надеюсь, это помогло!

Ответ №2:

Объедините списки в единый, переупорядочьте, получите индекс и перегруппируйте с помощью среза.

 A = [3,8,10,25]
B = [14,15,30,23]
C = [24,27,31,34]

flat = sum((A, B, C), [])
ordered = sorted(flat)
indeces = [ordered.index(i) 1 for i in flat]
A, B, C = [indeces[len(A)*i: len(A)*(i 1)] for i in range(len(flat)//len(A))]
 

Примечание: list.index -методы на основе ненадежны, если в списках есть повторяющиеся значения, поскольку они возвращают первое вхождение.