Python: сортировка списка в порядке возрастания и его разделение

#python

#python

Вопрос:

Например: у меня есть список, который:

[0,15,1,7,2,16]

И мне нужно было бы вывести этот список в

[(1,7),(0,15),(2,16)] .

При этом разделяются каждые два термина с начала, а также второй термин подсписка упорядочивается в порядке возрастания.

Есть ли способ выполнить это без использования каких-либо функций библиотеки python, кроме import math?

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

1. Ах, так это домашнее задание …?? А вы пробовали решать это самостоятельно?

2. это была дополнительная задача, которая не была оценена. Я получил этот список из другой серии вычислений. Я подумал, не использовать ли мне цикл for, чтобы найти минимальное значение 2-го элемента, а затем отсортировать его.

3. Ну, в любом случае приятно проявить некоторые усилия в решении проблемы, когда вы просите о помощи в SO, иначе создается впечатление, что вы просто хотите, чтобы другие выполнили какую-то задачу за вас

4. я понимаю. Я попробую сам и немного опубликую его

Ответ №1:

С пониманием списка и методом сортировки

 l1 = [0,15,1,7,2,16]
def on_sec(v):
    return v[1]
print(sorted ([(l1[e], l1[e 1]) for e in range(0, len(l1), 2)], key=on_sec))

# OUTPUT: [(1, 7), (0, 15), (2, 16)]
  

Ответ №2:

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

 a = [0,15,1,7,2,16]
b = sorted([a[n:n 2] for n in range(0, len(a), 2)], key = lambda x: x[1])
print(b)    # OUTPUT : [[1, 7], [0, 15], [2, 16]]
  

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

1. я пробовал ваш код, но он ничего не выводит в командное окно

2. @Tony Попробуйте присвоить переменной типа b = sorted(..) и затем print(b) . Должно сработать

Ответ №3:

Numpy очень полезен для такого рода операций разделения. Мы можем использовать reshape , чтобы разделить его на пары, а затем отсортировать на основе второго элемента.

 import numpy as np

l = [0,15,1,7,2,16]
split = np.reshape(l, (-1,2))
sorted(split, key = lambda x: x[1])
  

В качестве альтернативы мы также можем выполнить сортировку с помощью numpy:

 split[split[:,1].argsort()]
  

Ответ №4:

 a = [0,15,1,7,2,16] 
l = [] 
for i in range(0,len(a),2): 
    c = (a[i],a[i 1]) 
    l.append(c) 

l.sort() 
print(l)
  

Ответ №5:

Вы можете использовать функцию sorted() с ключом:

 l = [0, 15, 1, 7, 2, 16]

sorted(zip(l[::2], l[1::2]), key=lambda x: x[1])
# [(1, 7), (0, 15), (2, 16)]