Yes, the examples given are very different.
The first example effectively says:
Take the string
s
, split it by spaces, and then take each word,x
, found and return the minimum value of just the length ofx
.
The second example effectively says:
Find the minimum value in the list generated by
len(x) for x in s.split()
.
That first example generates an error because the min
function expects to compare at least 2 or more elements, and only 1 is provided.
That second example works because the list that is generated by len(x) for x in s.split()
converts a string, like say "Python types with ducks?"
to a list of word lengths (in my example, it would convert the string to [6, 5, 4, 6]
). That list that is generated (this is also why it’s called a generator), is what the min
function then uses to find the minimum value inside said list.
Another way to write that first example so that it works like you would expect is like this
def find_short(s):
min_length = float("inf")
for x in s.split():
if len(x) < min_length:
min_length = len(x)
return min_length
However, notice how you have to keep track of a variable that you do not have to define using the list generator method in your second example. Although this is not a big deal when you are learning programming for the first time, it becomes a bigger deal when you start making larger, more complex programs.
Sidenote:
Any value that follows the return
keyword is what a function «outputs», and thus no more code gets executed.
For example, in your first example (and assuming that the error was not generated), your loop would only ever execute once regardless of the string you give it because it does not check that you actually have found the value you want. What I mean by that is that any time your code encounters a return
statement, it means that your function is done.
That is why in my example find_short
function, I have an if
statement to check that I have the value that I want before committing to the return
statement that exits the function entirely.
Можно сделать так:
import re
s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
words = re.sub("[^w]", " ", s).split()
# если просто найти все минимальные слова
t = [v for v in words if len(v) == len(min(words))]
# если все слова надо разделить по длине
from itertools import groupby
t1 = {k:list(v) for k,v in groupby(sorted(words, key=len), len)}
print(t1[min(t1)], t)
2 / 2 / 0 Регистрация: 26.12.2021 Сообщений: 20 |
|
1 |
|
Самое короткое слово в списке29.06.2022, 17:43. Показов 1239. Ответов 7
Написать программу, вычисляющую длину самого короткого слова в
0 |
New Life 211 / 108 / 44 Регистрация: 12.12.2016 Сообщений: 387 |
||||
29.06.2022, 17:47 |
2 |
|||
0 |
4611 / 3148 / 1112 Регистрация: 21.03.2016 Сообщений: 7,840 |
|
29.06.2022, 17:49 |
3 |
New Life, ой ли ???
2 |
Catstail Модератор 35559 / 19459 / 4071 Регистрация: 12.02.2012 Сообщений: 32,497 Записей в блоге: 13 |
||||
29.06.2022, 17:50 |
4 |
|||
0 |
Semen-Semenich 4611 / 3148 / 1112 Регистрация: 21.03.2016 Сообщений: 7,840 |
||||
29.06.2022, 17:55 |
5 |
|||
Catstail, ну задумка то New Life, ясна но не учтено по какому параметру min отбирает слово ( по первой орфографически меньшей букве) а нам нужна длина минимальная
1 |
New Life 211 / 108 / 44 Регистрация: 12.12.2016 Сообщений: 387 |
||||
29.06.2022, 17:56 |
6 |
|||
ой ли ??? , ошибся — бывает)
0 |
2 / 2 / 0 Регистрация: 26.12.2021 Сообщений: 20 |
|
29.06.2022, 18:00 [ТС] |
7 |
А нельзя а нельзя как-то ограничить количество слов в предложении ?
0 |
New Life 211 / 108 / 44 Регистрация: 12.12.2016 Сообщений: 387 |
||||
29.06.2022, 19:40 |
8 |
|||
А нельзя а нельзя как-то ограничить количество слов в предложении ? можно из всего что ввели взять первые 3 слова)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
29.06.2022, 19:40 |
Помогаю со студенческими работами здесь
Из введённых слов нужно выбрать самое длинное и самое короткое
Найти в списке самое короткое слово и вывести адрес строки, в которой слово находится В списке символов S1, S2, ., St найти самое короткое слово Дан текст. По порядку, самое короткое слово, заменить на самое длинное слово, если их длины не совпадают Определить самое длинное общее слово двух предложений, самое короткое слово первого предложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
задача найти самое короткое и длинное название города(формально). Выводится самое короткое название, а длинное нет. Не могу понять в чём проблема. Заранее спасибо.
Вот код :
x1 = str(input())
x2 = str(input())
x3 = str(input())
x11 = len(x1)
x22 = len(x2)
x33 = len(x3)
xmax = max(x11, x22, x33)
xmin = min(x11, x22, x33)
if xmin == x11 or xmin == x22 or xmin == x33:
if xmin == x11:
print(x1)
elif xmin == x22:
print(x2)
else:
if xmin == x33:
print(x3)
elif xmax == x11 or xmax == x22 or xmax == x33:
if xmax == x11:
print(x1)
elif xmax == x22:
print(x2)
else:
if xmax == x33:
print(x3)
задан 24 июл 2022 в 14:39
1
short, *_, long = sorted([
input(),
input(),
input(),
], key=len)
print(
f'{short = }',
f'{long = }',
sep='n'
)
ответ дан 24 июл 2022 в 14:57
NamerekNamerek
6,1262 золотых знака7 серебряных знаков23 бронзовых знака
1
Не совсем ясно, почему в строке elif xmax == x11 or xmax == x22 or xmax == x33:
используется elif. Замените на обычное if
ответ дан 24 июл 2022 в 14:44
ProgProg
4193 серебряных знака15 бронзовых знаков
d = {len(x): x for x in (input() for _ in range(3))}
print('short = ', d[max(d)], 'long = ', d[min(d)])
ответ дан 25 июл 2022 в 6:07
vadim vaduxavadim vaduxa
8,89714 серебряных знаков24 бронзовых знака
Я работаю над заданием, где мне нужно, чтобы кто-то ввел строку слов, и моя программа должна затем выбрать длину самого короткого и самого длинного слова в этой строке. Я успешно сделал это, чтобы выбрать длину самого длинного слова:
def longWord(string):
alist = []
length = 0
for letter in string:
if letter != " ":
length +=1
else:
alist.append(length)
length = 0
return alist
Поэтому, если ввод «счастливый день», моя функция печати сообщает мне, что самое длинное слово состоит из 5 символов.
Тем не менее, я не могу понять, как написать что-то, что выберет длину самого короткого слова во входной строке. Как бы я это сделал?