Как вернуть каждое слово и его соответствующую длину из списка

Я пытаюсь найти длину всех слов в строке и вернуть список с каждым словом и его длиной рядом с ним. Вот пример:

Строка «привет, питон» вернет [«привет 5», «питон 6»]

Я написал это до сих пор:

ele1 = str_[0]
lettlist = list(map(len, str_.split()))
return (str(lettlist))

И он возвращает только числа, например, «[5, 5]» для «привет, мир». Как мне заставить его возвращать как строку, так и числа в списке, как в моем примере выше?

«И он возвращает только числа, например, «[5, 5]» для «привет, мир». - ну да, потому что функция len, которая mapped, возвращает только эти значения. Можете ли вы написать функцию, которая дает желаемый результат для одной строки? Что произойдет, если вы попробуете mapпинговать эту функцию вместо len? В какой части вы на самом деле застряли?

Karl Knechtel 14.02.2023 18:40
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
2
1
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Поскольку вам нужно слово в результате, вы можете создать fstring со словом, вычислить длину слова и добавить значение в ту же строку. Python отформатирует строку результата в желаемый результат и переберет список, который возвращает phrase.split(). Когда каждое значение вычислено, создается окончательный список.

def word_lengths(phrase):
    return [f"{word} {len(word)}" for word in phrase.split()]

print(word_lengths("How long are the words in this phrase"))
# ['How 3', 'long 4', 'are 3', 'the 3', 'words 5', 'in 2', 'this 4', 'phrase 6']

Map — не очень практичный инструмент, когда вы хотите делать подобные манипуляции. Часто проще использовать понимание списка, потому что синтаксис легче получить, адаптировать и исправить, если он не делает то, что вы хотите.

Используя функцию map, вот код:

def word_lengths(phrase):
    return list(map(lambda word: f"{word} {len(word)}", phrase.split()))

Как видите, это менее «английский», чем понимание списка, и требуется приведение к списку.

Неплохой ответ, но я действительно не понимаю, почему «понимание списка» было бы лучше (или проще для понимания), чем вызов map(). Оба являются краткими способами написания «для каждого цикла» (просто «цикла for» на языке Python) для коллекции, выполнения каких-либо действий с каждым элементом и возврата другой коллекции. Один способ встроен в язык, а другой использует отдельную функцию (но это также часть основной спецификации Python). Для программистов старой школы классический цикл может показаться даже «более английским». В конце концов, я думаю, это просто вопрос предпочтений.

Diego Ferruchelli 16.02.2023 05:46

Потому что это более питонично. Конвенция рекомендует использовать понимание списка в этом случае, потому что его, как правило, легче объяснить новичку, и программист старой школы также не будет испытывать затруднений, где map может быть трудно понять людям, не привыкшим к концепции функции. первый объект класса.

Dorian Turba 16.02.2023 15:05

Это? Python имеет 70 основных функций, включая такие конструкторы, как int(). Небольшой счет по сегодняшним меркам; и map() является одной из этих функций. Это также современный, возвращающий итератор и дающий результаты. Функции как FCO могут быть сложной концепцией для Java-программистов, но не для других. Я на 100% придерживаюсь философии языка (поэтому мне не нравятся TypeScript или Rust). Но программисты должны использовать доступные инструменты творчески (и разумно), а не просто повторять формулы. Лорен использовала map() и пыталась понять, что с ней не так.

Diego Ferruchelli 16.02.2023 16:32

Вот почему я показал решение с картой. Кроме того, поскольку ОП борется с картой и тем, как ее использовать, я предложил более простой инструмент. И по опыту понимание списка легче понять, чем карту. Вот и все, и если вам не нравится мой совет ОП, ок, заметил. Хорошего дня.

Dorian Turba 16.02.2023 22:19

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

str_ = "hello world"
lettlist = list(map(lambda s : s + " " + str(len(s)), str_.split()))
return str(lettlist)

Обратите внимание, что я только что заменил функцию (или ссылку на функцию), предоставленную в качестве первого параметра, на map().

len

Заменяется на:

lambda s : s + " " + str(len(s))

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