Возврат и печать Python в функции wordcount - PullRequest
0 голосов
/ 03 мая 2018

К кому это относится,

Когда я запускаю команду return, она не работает как чемпион; когда я запускаю печать, она печатается хорошо. Что я сделал не так? Моя цель - вернуть значение в списке. Ниже приведена функция возврата:

def wordcount(mylist): #define a wordcount func
    for i in mylist: # create a first loop to iterate the list
        for c in "-,\_.": #create a sec loop to iterate the punctuation
            i=i.replace(c," ") # replace the punctuation with space
            a=len(i.split()) #split the str with space and calculate the len
        return (a)    


mylist=["i am","i,heart,rock,music","i-dig-apples-and-berries","oh_my_goodness"]
wordcount(mylist)

Возвращает 2, мне нужно [2,4,5 3]. Ниже приведена функция печати, она возвращает 2 4 5 3. Как я могу решить эту проблему? Я долго искал. Большое спасибо!

def wordcount(mylist):
    for i in mylist:
        for c in "-,\_.":
            i=i.replace(c," ")
            a=len(i.split())
        print (a)    


mylist=["i am","i,heart,rock,music","i-dig-apples-and-berries","oh_my_goodness"]
wordcount(mylist)

1 Ответ

0 голосов
/ 03 мая 2018

Когда вы делаете return a, вы выходите из функции на первой for итерации.

Вы можете использовать list для накопления результатов:

def wordcount(mylist): #define a wordcount func
    ret = [] # list to accumulate results
    for i in mylist: # create a first loop to iterate the list
        for c in "-,\_.": #create a sec loop to iterate the punctuation
            i=i.replace(c," ") # replace the punctuation with space
            a=len(i.split()) #split the str with space and calculate the len
        ret.append(a) # append to list
    return ret # return results

или используйте yield вместо return (это создаст генератор ):

def wordcount(mylist): #define a wordcount func
    for i in mylist: # create a first loop to iterate the list
        for c in "-,\_.": #create a sec loop to iterate the punctuation
            i=i.replace(c," ") # replace the punctuation with space
            a=len(i.split()) #split the str with space and calculate the len
        yield a

Чтобы получить все предметы из генератора, конвертируйте их в list:

list(wordcount(mylist))
...