#python #function #sorting #nested-lists #custom-lists
#python #функция #сортировка #вложенные списки #пользовательские списки
Вопрос:
Мой код предназначен для сортировки списка списков в следующих примерах.
Я хотел бы сгруппировать все [Y, x, x] друг с другом.
C = [[1,2,3],[4,5,7],[7,8,9],[1,2,4],[4,5,6]]
Предполагаемый результат
Обратите внимание, что мой Y выделен жирным шрифтом
сортированный C = [[1, 2,3], [1,2,4], [4,5,7],[4,5,6],[7,8,9]]
c = [[4,5,10],[1,2,3],[4,5,6],[1,7,9],[1,2,8],[4,5,9],[1,7,8],[4,5,12],[9,8,7]]
sc = []
def sorting():
for a in range(0, len(c)):
for b in c[a 1:]:
# prevent duplicates
if b not in sc:
if c[a] not in sc:
if c[a][0] == b[0]:
sc.append(b)
sc.append(c[a])
for z in c:
if z not in sc:
for a in range(0, len(sc)):
if sc[a][0] == z[0]:
if sc.count(z) < 1:
# insert missing list into intended location
sc.insert(a, z)
# Append lists that may have been missed (eg. [9,8,7])
for zz in c:
if sc.count(zz) < 1:
sc.append(zz)
sorting()
print(sc)
Вывод ошибки
Эта функция имеет семантическую ошибку, поскольку она выводит [4, x, x] в неправильном месте. Как показано в примере, все [Y, x, x] должны быть сгруппированы вместе.
[[4, 5, 6], [4, 5, 10], [1, 7, 9], [1, 2, 3], [1, 7, 8], [1, 2, 8], [4, 5, 12], [4, 5, 9], [9, 8, 7]]
Вопрос
Как выглядела бы более профессиональная функция для сортировки моих списков по назначению?
Какие ошибки я делаю, которые приводят к недопустимому выводу?
Комментарии:
1. необходима ли реализация вашего собственного алгоритма сортировки? или использование встроенного
sorted
будет тем, что вы ищете?2. Вам специально запрещено использовать такие функции, как
sort
иsorted
? Если нет, «профессиональным» решением было бы сделать что-то вродеsc = sorted(c)
. 🙂3. Если вам требуется реализовать свою собственную логику сортировки с нуля, я бы рекомендовал провести небольшое исследование стандартных стратегий сортировки и попытаться реализовать одну из них, а не пытаться изобрести свою собственную. Сортировка выбора была бы очень похожа на то, что вы пытаетесь, но проще — выполните цикл по списку, возьмите наименьший элемент и добавьте его к результату, повторите, чтобы найти следующий наименьший элемент, повторяйте до завершения.
4. Никогда не будет перекрытия между группами? Что произойдет, если у вас есть C = [[1,2,3],[4,5,7],[7,8,9],[1,2,4],[4,5,6],[1,2,4]]. Где последняя группа имеет 1 и 4.
Ответ №1:
попробуйте использовать лямбда-функцию для функции сортировки, чтобы сортировать только по первому элементу. попробуйте это:
c = [[4,5,10],[1,2,3],[4,5,6],[1,7,9],[1,2,8],[4,5,9],[1,7,8],[4,5,12],[9,8,7]]
a = sorted(c, key=lambda parameter: parameter[0]) # sort by first element in item
print(a)
вывод:
[[1, 2, 3], [1, 7, 9], [1, 2, 8], [1, 7, 8], [4, 5, 10], [4, 5, 6], [4, 5, 9], [4, 5, 12], [9, 8, 7]]