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

Я новичок в 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 
  • Лучший и / или быстрый способ создания списков в python
  • Список чередования с фиксированным элементом
  • Как объединить списки в список кортежей в Python?
  • Назначение списка с помощью
  • Одинаково для rindex для списков в Python
  • Python: доступ к элементам многомерного списка, с учетом списка индексов
  • уникальный список python на основе элемента
  • Почему список необходим для random.choice
  • Убедитесь, что все dicts в списке имеют одинаковые ключи
  • понимание вложенного списка python
  • Возвращает кортеж с наименьшим значением y из списка кортежей
  • Python - лучший язык программирования в мире.