Как отсортировать список по длине в python
Перейти к содержимому

Как отсортировать список по длине в python

  • автор:

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

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

xs = ['dddd','a','bb','ccc'] print xs xs.sort(lambda x,y: len(x) < len(y)) print xs ['dddd', 'a', 'bb', 'ccc'] ['dddd', 'a', 'bb', 'ccc'] 

Что может быть неправильным?
prosseek 06 апр. 2010, в 21:17
Поделиться
Поделиться:

6 ответов

Лучший ответ

Когда вы передаете lambda в sort , вам нужно вернуть целое число, а не логическое. Поэтому ваш код должен читать следующим образом:

xs.sort(lambda x,y: cmp(len(x), len(y))) 

Обратите внимание, что cmp является встроенной функцией, так что cmp(x, y) возвращает -1, если x меньше y , 0, если x равно y , а 1, если x больше, чем y . Конечно, вы можете использовать параметр key :

xs.sort(key = lambda s: len(s)) 

Это говорит о методе sort для заказа на основе того, что возвращает функция ключа. EDIT: Спасибо balpha и Ruslan ниже, указав, что вы можете просто передать len непосредственно в качестве ключевого параметра функции, тем самым устраняя необходимость в lambda :

xs.sort(key = len) 

И как указывает Руслан, вы также можете использовать встроенную функцию sorted, а не метод list.sort , который создает новый список, а не сортирует существующее на месте:

print sorted(xs, key=len) 

Сортировка списков в Python

В Python данные можно сортировать с помощью методов sorted() или sort() . В этой статье мы поговорим о том, как работает сортировка списков в Python. Разберем примеры кода для методов sorted() и sort() и посмотрим, чем они отличаются.

Что такое метод sort() в Python?

Этот метод берет список и сортирует его. То есть на выходе мы получаем тот же список, только отсортированный. Этот метод не возвращает никакого значения.

В этом примере у нас есть список чисел, и мы можем использовать метод sort() для сортировки списка в порядке возрастания.

my_list = [67, 2, 999, 1, 15] # Выводим неупорядоченный список: print("Unordered list: ", my_list) # Сортировка списка my_list.sort() # Выводим упорядоченный список print("Ordered list: ", my_list)

Выполним наш код и получим следующий результат:

Unordered list: [67, 2, 999, 1, 15] Ordered list: [1, 2, 15, 67, 999]

Однако если список уже отсортирован, то мы получим None.

my_list = [6, 7, 8, 9, 10] # Это строка вернет None, потому что список уже отсортирован print(my_list.sort())

Метод sort() может принимать два необязательных аргумента: key и reverse .

Значением key выступает функция, которая будет вызываться для каждого элемента в списке.

От редакции Pythonist. О функциях и их аргументах у нас есть отдельная статья — «Функции и их аргументы в Python 3».

В следующем примере давайте используем функцию len() в качестве значения аргумента key. Таким образом, key=len скажет компьютеру отсортировать список имен по длине, от наименьшего к наибольшему.

names = ["Jessica", "Ben", "Carl", "Jackie", "Wendy"] print("Unsorted: ", names) names.sort(key=len) print("Sorted: ", names)

Вот, что мы получим:

Unsorted: ['Jessica', 'Ben', 'Carl', 'Jackie', 'Wendy'] Sorted: ['Ben', 'Carl', 'Wendy', 'Jackie', 'Jessica']

Аргумент reverse может иметь логическое значение: True (Истина) или False (Ложь).

В следующем примере reverse=True укажет компьютеру отсортировать список в обратном алфавитном порядке.

names = ["Jessica", "Ben", "Carl", "Jackie", "Wendy"] print("Unsorted: ", names) names.sort(reverse=True) print("Sorted: ", names) # Результат: # Unsorted: ['Jessica', 'Ben', 'Carl', 'Jackie', 'Wendy'] # Sorted: ['Wendy', 'Jessica', 'Jackie', 'Carl', 'Ben']

[python_ad_block]

Как использовать метод sorted() в Python

Этот метод превращает итерируемый объект в отсортированный список. Итерируемыми объектами могут быть списки, строки и кортежи.

Одно из ключевых различий между sort() и sorted() заключается в том, что sorted() вернет новый список, а sort() сортирует уже имеющийся.

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

sorted_numbers = sorted([77, 22, 9, -6, 4000]) print("Sorted in ascending order: ", sorted_numbers) # Результат: # Sorted in ascending order: [-6, 9, 22, 77, 4000]

Метод sorted() тоже принимает необязательные аргументы. Они такие же, как и у sort() : key и reverse .

Давайте разберем следующий пример. У нас есть список чисел. Пропишем необязательный аргумент reverse=True . Он укажет компьютеру отсортировать список от наибольшего числа к наименьшему.

sorted_numbers = sorted([77, 22, 9, -6, 4000], reverse=True) print("Sorted in descending order: ", sorted_numbers) # Результат: # Sorted in descending order: [4000, 77, 22, 9, -6]

Метод sorted() для других типов данных

Еще одно ключевое различие между sorted() и sort() заключается в том, что метод sorted() принимает любые итерируемые объекты (списки, строки, кортежи и т.д.), тогда как метод sort() работает только со списками.

Давайте разобьём строку на отдельные слова с помощью метода split() , а затем используем метод sorted() для сортировки слов по длине от наименьшего к наибольшему.

my_sentence = "Jessica found a dollar on the ground" # Вывод оригинального предложения: print("Original sentence: ", my_sentence) # Вывод отсортированного списка слов: print(sorted(my_sentence.split(), key=len)) # Результат: # Original sentence: Jessica found a dollar on the ground # ['a', 'on', 'the', 'found', 'dollar', 'ground', 'Jessica']

А теперь давайте чуть изменим наш пример. Добавим необязательный аргумент reverse . Благодаря этому список будет отсортирован в обратном порядке, от самого длинного слова к самому короткому.

my_sentence = "Jessica found a dollar on the ground" print("Original sentence: ", my_sentence) print(sorted(my_sentence.split(), key=len, reverse=True)) # Результат: # Original sentence: Jessica found a dollar on the ground # ['Jessica', 'dollar', 'ground', 'found', 'the', 'on', 'a']

Мы также можем использовать метод sorted() и для кортежей.

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

band_students = [ ('Danny', 17, 'Trombone'), ('Mary', 14, 'Flute'), ('Josh', 15, 'Percussion') ]

Мы можем использовать метод sorted() для сортировки этих данных по возрасту учащегося. Аргумент key будет иметь значение лямбда-функции, которая сообщает компьютеру о сортировке по возрасту в порядке возрастания.

Лямбда-функция – это анонимная функция. Этот тип функции можно определить с помощью ключевого слова lambda .

Итак, напишем следующую лямбду-функцию, которая будет говорить нашей программе, что отсортировать мы хотим именно по возрасту:

lambda student: student[1]

Чтобы получить доступ к значению в кортеже, мы используем квадратные скобки [] и индекс элемента в кортеже, к которому хотим получить доступ. Поскольку в Python отсчет идет с нуля, возраст у нас будет под индексом [1] .

Таким образом, мы получаем следующий код:

band_students = [ ('Danny', 17, 'Trombone'), ('Mary', 14, 'Flute'), ('Josh', 15, 'Percussion') ] print(sorted(band_students, key=lambda student: student[1])) # Результат: # [('Mary', 14, 'Flute'), ('Josh', 15, 'Percussion'), ('Danny', 17, 'Trombone')]

Мы можем изменить этот пример. Давайте отсортируем кортежи по названиям музыкальных инструментов. Более того, давайте используем reverse=True для сортировки инструментов в обратном алфавитном порядке.

band_students = [ ('Danny', 17, 'Trombone'), ('Mary', 14, 'Flute'), ('Josh', 15, 'Percussion') ] print(sorted(band_students, key=lambda student: student[2], reverse=True)) # Результат: # [('Danny', 17, 'Trombone'), ('Josh', 15, 'Percussion'), ('Mary', 14, 'Flute')]

Заключение

В этой статье мы разобрали, как работает сортировка списков в Python. Узнали, как работать с такими методами, как sort() и sorted() , и в чем их различия.

Метод sort() работает только со списками и сортирует уже имеющийся список. Данный метод ничего не возвращает.

А метод sorted() работает с любыми итерируемыми объектами и возвращает новый отсортированный список. В качестве итерируемых объектов могут выступать списки, строки, кортежи и другие.

У обоих этих методов есть два необязательных аргумента: key и reverse .

Значением аргумента key может быть функция. Она будет вызываться для каждого элемента в списке. По этой функции, собственно, и будет проводиться сортировка.

Значением аргумента reverse может быть True или False .

Надеемся, эта статья была для вас полезна. Успехов в написании кода!

Сортировка списка по нескольким атрибутам в Python

Сортировка данных — одна из самых распространенных задач в программировании. В Python есть встроенная функция sorted() , которая позволяет сортировать данные по одному атрибуту. Например, представьте, что у вас есть список списков:

data = [[5, 'Алексей', 'синий'], [3, 'Виктор', 'красный'], [7, 'Алексей', 'желтый']]

Можно отсортировать этот список по имени, используя функцию sorted() и itemgetter() из модуля operator :

from operator import itemgetter sorted_data = sorted(data, key=itemgetter(1))

Но что делать, если нужно отсортировать список по нескольким атрибутам, например, по имени и цвету одновременно?

Сортировка по нескольким атрибутам

В Python, функция sorted() может принимать в качестве ключа кортеж. Это означает, что можно отсортировать список по нескольким атрибутам, просто передав их в качестве ключа в виде кортежа. Вернемся к предыдущему примеру и отсортируем его по имени и цвету:

from operator import itemgetter sorted_data = sorted(data, key=itemgetter(1, 2))

Так, список будет сначала отсортирован по имени, а затем, внутри каждой группы с одинаковыми именами, по цвету. Это позволяет очень просто и эффективно сортировать данные по нескольким атрибутам одновременно.

Заключение

В Python, сортировка данных по нескольким атрибутам — это просто и эффективно. Используя функцию sorted() и itemgetter() из модуля operator , можно легко отсортировать список по любому количеству атрибутов, просто передав их в качестве ключа в виде кортежа. Это делает Python мощным инструментом для обработки и анализа данных.

Сортировка по алфавиту и длине сразу

Цель: сделать сортировку по алфавиту и длине строк. Вопрос: Пока что код есть такой, не знаю как правильно задать ключу сортировки, чтобы выполнялась сортировка так, как нужно, помогите, пожалуйста. Данный код выполняет сортировку только по длине строк..

open_file = open('testlist.txt', 'r').readlines() save_file = open('testlist_sorted.txt', 'w') for line in sorted(open_file, key=len): save_file.write(line) 

Буду благодарен вашей помощью! С уважением, Иван.
Отслеживать
задан 14 ноя 2013 в 12:27
23 1 1 серебряный знак 5 5 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Просто убери ключ.

>>> t = ['a', 'cc', 'b', 'bbb', 'aaa', 'aa', 'c', 'ccc', 'bb'] >>> sorted(t) ['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'c', 'cc', 'ccc'] 

Если тебе нужен какой-то другой результат, то опиши в вопросе что ты должен получить на выходе.

Отслеживать
ответ дан 15 ноя 2013 в 11:29
Данияр Супиев Данияр Супиев
1,135 6 6 серебряных знаков 13 13 бронзовых знаков

  • python
  • сортировка
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.9.3159

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *