Слова в строках в тексте в строке в списке. Как вернуть необходимый вывод?

#string #list #python-3.x #text

#строка #Список #python-3.x #текст

Вопрос:

stackoverfollowers! у меня есть задача, с которой я не могу справиться до конца

Написать функцию words(a, b, txt)

txt = ['All in the golden afternoonnFull leisurely we glide;nFor
both our oars, with little skill,nBy little arms are plied,nWhile
little hands make vain pretencenOur wanderings to guide.']

a = 6

b = 8

Функция должна возвращать все слова длиной от 6 до 8 букв в каждой строке. Если в строке нет таких слов, она возвращает пустую строку. Если в строке более одного слова, они должны иметь порядок, аналогичный порядку в строке

Функция words(a,b,txt) должна вернуть

['golden', '', 'little','little', 'little pretence', '']

я написал такой код:

 def noalpha(s):   


    noa = ''         # choose all non-alphabetic symbols
    for c in s:
        if not (c in noa or c.isalpha()):
            noa  = c
    return noa

def words(a,b,txt):

    lst = []
    for i in txt:       # work with a whole text that is one element in list txt

        i = i.splitlines()    # split text in lines n
        for s in i:           # iteration in lines
            s = s.split()
            for w in s:       # iteration in words
                w = w.replace(noalpha(w), '')

                if a <= len(w) <= b:
                    lst.append(w)


        return lst  
  

поэтому я не могу найти способ:

  1. возвращает '' (пустую строку) для целой строки, которая не содержит слов необходимой длины
  2. если строка содержит более одного слова, я не могу вернуть их как 'word1 word2 word3'

Комментарии:

1. Вы правильно сделали отступ в своем финале return ? Правильный ли вывод, как вы можете вернуться 'little pretence' , когда разделяете слова? Вы можете return ' '.join(lst) вернуть слова в виде строки.

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

3. моя функция возвращает список, подобный этому [«золотой», «маленький», «маленький», «маленький», «притворство»], но он должен возвращаться так [«золотой», «, «маленький», «маленький», «маленький притворство», «] так что у меня нетстроки голосования и слова «little» и «pretence» возвращаются отдельно, в то время как их необходимо возвращать в одной строке, поскольку они принадлежат одной строке

4. это оно! я хотел бы вернуть строку слов, которая принадлежит к одной строке, а не каждое слово отдельно, но я не знаю, как исправить мой код!

Ответ №1:

Что-то вроде этого?

 def alpha(word):
    return ''.join(char for char in word if char.isalpha())


result = []
for line in txt[0].splitlines():
    words = [alpha(word) for word in line.split()]
    result.append(' '.join(word for word in words if a <= len(word) <= b))