Как организовать три списка таким образом, чтобы сумма соответствующих элементов, если они больше, появляются сначала?

Я новичок в python. У меня есть три списка поплавков одинаковой длины. Номера распределены случайным образом во всех списках. Но позиции элементов в одном списке соответствуют другим элементам одних и тех же позиций в других списках. Скажем, списки,

a=[1,5,3,2,4] b=[20,30,50,40,10] c=[400,500,100,300,200]

Теперь элементы одинаковых позиций в этих трех списках соответствуют друг другу. Как 1, 20 и 400 соответствуют друг другу; 3, 50 и 100 соответствуют друг другу и так далее. Я должен упорядочить числа таким образом, чтобы для любой позиции i этих трех списков, если сумма соответствующих чисел больше, тогда эти три числа должны появиться сначала в списках. Например, e=[500, 400, 300, 200, 100] f=[30,20,40,10,50] g=[5,1,2,4,3]

Таким образом, позиции соответствующих номеров полностью изменились. Или их переписка НЕ ​​ДОЛЖНА ПЕРЕРЫВАТЬ. Будучи новичком, я пытался разными способами, но все напрасно. Пожалуйста, помогите мне.

2 Solutions collect form web for “Как организовать три списка таким образом, чтобы сумма соответствующих элементов, если они больше, появляются сначала?”

В качестве ответа на исходный вопрос (pre edit)

Попробуй это.

 a=[1,5,3,2,4] b=[20,30,50,40,10] c=[400,500,100,300,200] x = sorted(zip(a,b,c), key=lambda x: sum(x), reverse=True) e, f, g = map(list, zip(*x)) print e print f print g 

Вывод

 [5, 1, 2, 4, 3] [30, 20, 40, 10, 50] [500, 400, 300, 200, 100] 

Используйте zip для создания списка tuples , затем сортируйте их, используя их сумму в качестве ключа, отмените так, чтобы наибольшая сумма была первой. Если вы используете python 2.7, вы можете использовать izip вместо zip чтобы несколько уменьшить нагрузку на память большими списками, но полный отсортированный список все еще нужно создать. В python 3 zip эквивалентно izip 2.7.

sorted функция вернет вам список кортежей, поэтому вы хотите вернуть их обратно в исходный формат 3 списка. Самый быстрый и чистый способ сделать это (любезно предоставлено @JohnClements).

 e, f, g = map(list, zip(*x)) 

Чтобы объяснить это утверждение, помните, что x представляет собой список tuples каждый из которых имеет длину 3.

  • Сначала пропустите zip распакованные tuples из x (используя выражение *x ). Это приводит к появлению нового списка, содержащего 3 tuples . Первый tuple содержит все первые элементы из кортежей в x, второй tuple содержит все остальные элементы из x и т. Д.
  • Теперь у вас есть список tuples , но мы хотим, чтобы наш итеративный lists содержал lists , поэтому map – это правильная функция, используемая для преобразования. Он будет быстрым, поскольку он выполняет преобразование в собственном c-коде. Результатом является list list s.
  • наконец, мы можем распаковать list lists на 3 отдельные переменные списка e , f и g .

Если вам требуется более подробное понимание кода, я предлагаю вам распечатать вывод на промежуточных этапах.

Вы можете отсортировать значения списков как:

 a=[1,5,3,2,4] b=[20,30,50,40,10] c=[400,500,100,300,200] x = sorted(range(len(a)), key = lambda x:a[x]+b[x]+c[x], reverse = True) print "\n".join([" ".join([str(j[i]) for i in x])for j in [a, b, c]]) >>> 5 1 2 4 3 30 20 40 10 50 500 400 300 200 100 
Interesting Posts

python – Ошибка обработки файлов Steganographer для файлов без текста

Vim показывает: ImportError: Нет модуля с именем site. в то время как я использую Canopy1.1

Сравните файлы по строкам, чтобы убедиться, что они одинаковые, если они выводят их

Почему вызов генератора KFold с тасованием дает одинаковые индексы?

использование памяти pandas при переиндексации

Как изменить формат индекса Datetime (UTC) в Pandas?

Попробуйте прочитать json-файл с помощью python

Python regex look-behind требует шаблона с фиксированной шириной

Являются ли переменные экземпляра Python безопасными для потоков?

TypeError: Невозможно преобразовать объект 'int' в str неявно

вложенных "и / или" if "

wxPython – рисование незаполненного прямоугольника с DC

используя косинус matplotlib в петле эффективно

Python: deepcopy (list) vs new_list = old_list

Издевательство над функцией для исключения исключения для проверки исключающего блока

Python - лучший язык программирования в мире.