#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 имеет индекс 24C = [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
-методы на основе ненадежны, если в списках есть повторяющиеся значения, поскольку они возвращают первое вхождение.