Python помещает самое длинное слово в список последним

list1 : ['beg', 'begs', 'big', 'bug', 'buggies', 'bugs', 'bus', 'egg', 'eggs', 'gig', 'sub', 'sue', 'use'] BUGGIES

У меня есть список слов, но я хочу поместить самое длинное слово «багги» в конец списка, но сохранить порядок в алфавитном порядке, за исключением самого длинного слова. Может быть случай, когда более одного слова соответствуют максимальному значению (len), в этом случае было бы неплохо иметь эти слова в конце. но я надеюсь просто найти первого.

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

list1 : ['beg', 'begs', 'big', 'bug', 'bugs', 'bus', 'egg', 'eggs', 'gig', 'sub', 'sue', 'use', 'buggies']

Любая помощь по этому поводу будет оценена по достоинству, я только начинаю изучать Python.

То, что я пробовал, ну, ничего по этому поводу, но это то, что у меня сейчас есть:

sortedwords = sorted(list, key=len)
possible_words = sorted(list)
print('list1:', possible_words, max(possible_words, key=len).upper())

Отсортируйте список по алфавиту. Найдите самое длинное слово в списке. Удалите его, а затем добавьте обратно в список в конце. В чем сложность?

John Gordon 12.07.2024 03:33
см. здесь.
user24714692 12.07.2024 03:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
127
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете добиться этого, сначала найдя самое длинное слово (слова) в списке, а затем отсортировав список, гарантируя, что самое длинное слово (слова) будет помещено в конец:


list1 = ['beg', 'begs', 'big', 'bug', 'buggies', 'bugs', 'bus', 'egg', 'eggs', 'gig', 'sub', 'sue', 'use']

#This is will find the length of the longest word in the list
max_len = max(len(word) for word in list1)

# separate the longest word from other words to sort the list
longest_words = [word for word in list1 if len(word) == max_len]
other_words = [word for word in list1 if len(word) != max_len]

# sort the list contains otherwords
sorted_other_words = sorted(other_words)

# finally combine both lists to get the resultant list
result_list = sorted_other_words + longest_words

print(result_list)

Выход:

['beg', 'begs', 'big', 'bug', 'bugs', 'bus', 'egg', 'eggs', 'gig', 'sub', 'sue', 'use', 'buggies']

Это хорошая проблема для использования цикла for:

max_word_len = 0
longest_word_index = -1

for i in range(len(list1)):
    if len(list1[i]) > max_word_len:
        max_word_len = len(list1[i])
        longest_word_index = i

temp_long_word = list1[index]
del list1[longest_word_index]
list1.push(temp_long_word)

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

братан, твое решение не работает более чем для одного слова в списке. Вам необходимо поддерживать список всех индексов max_len в списке. и, наконец, удалите их все из списка и добавьте в конец

Nalan PandiKumar 12.07.2024 05:02

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

spyguy 12.07.2024 05:12

Несмотря на то, что оно не работает для полного решения, оно написано совершенно непитонично. Прежде всего, -1 в индексировании Python имеет смысл, поэтому вы не можете просто считать этот индекс несуществующим, он относится к последнему элементу. Во-вторых, у вас уже есть функция max(), почему бы не использовать ее, чтобы сделать код более понятным, читабельным и простым в поддержке? (@Ответ Матиаса содержит хороший пример использования). Хорошо, предположим, что вам нужно больше логики в цикле, и вам нужен сам элемент и индекс -> тогда используйте enumerate().

maxwell 13.07.2024 12:24

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

spyguy 13.07.2024 16:50

Определите длину самого длинного слова. Затем используйте функцию сортировки, которая проверяет, имеет ли текущее слово максимальную длину или нет.

list1 = ["one", "two", "three", "four", "five", "six", "seven"]
maxlen = len(max(list1, key=len))
list1.sort(key=lambda s: (len(s) == maxlen, s))

Результат ['five', 'four', 'one', 'six', 'two', 'seven', 'three']. «семь» и «три» — самые длинные слова и располагаются в конце списка.

Ключевая функция возвращает кортеж, в котором первое значение равно 1, если длина равна максимальной длине, и 0 в противном случае. Следовательно, это первый критерий сортировки. Второе значение — это сама строка, поэтому слова сортируются в алфавитном порядке в соответствующих группах.

Мужчины (и дамы тоже) Я новичок в этом, и я ценю все ответы, но больше всего мне откликается Л. Тайрон, он хорошо прокомментирован, за ним легко следить, и теперь я выучил несколько вещей, например, слова. удалить и слова.добавить. Не говорю, что другие ответы плохи, но этот на моем уровне, и я могу понять. Спасибо всем за ваш вклад.

sinyce 19.07.2024 23:40
Ответ принят как подходящий

Менее эффективное, но потенциально более простое для понимания решение:

# Find the longest word
longest_word = max(words, key=len)

# Remove the longest word from the list
words.remove(longest_word)

# Sort the remaining words alphabetically
sorted_words = sorted(words)

# Append the longest word to the end
sorted_words.append(longest_word)

# Print the result
print('list1:', sorted_words)

В результате получается ['просить', 'просить', 'большой', 'ошибка', 'ошибки', 'автобус', 'яйцо', 'яйца', 'концерт', 'суб', 'судить', 'использовать ', 'багги'] для списка, который вы изначально предоставили

Функция .max() (по умолчанию) находит первое самое длинное слово, а не все самые длинные слова. Кроме того, .remove() (по умолчанию) удаляет только первое вхождение слова. Поскольку автор намеревается расширить решение для обработки нескольких слов, ваше решение нелегко расширить и оно может скорее вводить в заблуждение, чем помогать.

maxwell 13.07.2024 02:31

Найдите максимальную длину, а затем отсортируйте ее по тому, имеют ли слова такую ​​длину.

m = max(map(len, list1))
list1.sort(key=lambda s: len(s) == m)

Попробуйте это онлайн!

Другие вопросы по теме