Как пройти полный цикл, используя функцию

Подскажите, пожалуйста, есть функция 'find_names', она выдает лишь 1 имя из строки 'str'.

str = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
list = []
def find_names(string):
    for i in string.split():
        for n in names_list:
            if "names" in str:
                if n in i:
                    list.append(n)
                    return list
find_names(str)

Eсли пишут тот же код, но без функции, получаю полный список имен.

str = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
list = []
for i in str.split():
    for n in names_list:
        if "names" in str:
            if n in i:
                list.append(n)
print(list)

Ответы (3 шт):

Автор решения: Vladislav Tikhomirov

Вам необходимо внутри функции return заменить на print, чтобы у вас произошёл вывод, а не возврат переменной с последующим завершением функции

str = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']
list = []

def find_names(string):
    for i in str.split():
        for n in names_list:
            if "names" in str:
                if n in i:
                    list.append(n)
    print(list)

find_names(str)
→ Ссылка
Автор решения: Zhihar

Ну так вы после первого условия сразу делаете return и выходите из функции

def find_names(string):
    for i in string.split():
        for n in names_list:
            if "names" in str:
                if n in i:
                    list.append(n) # записываем в list первое значение
                    return list # и тут же выходим из цикла

Просто сделайте выход из функции не в цикле:

def find_names(string):
    for i in string.split():
        for n in names_list:
            if "names" in str:
                if n in i:
                    list.append(n)

    return list

и все будет в порядке

→ Ссылка
Автор решения: CrazyElf

Кстати, при таком сценарии использовании функции можно и вообще без return и переменной-списка обойтись:

str_ = 'names: "Ivan", "Petr", "Nikolai"'
names_list = ['Ivan', 'Petr']

def find_names(string):
    for i in string.split():
        for n in names_list:
            if "names" in str_:
                if n in i:
                    yield n

print(list(find_names(str_)))
→ Ссылка