Я не понимаю, почему программа пару раз повторяет код при его отображении

    current_users = ['jaden', 'dan', 'kolya', 'mitya', 'admin']
    new_users = ['roma', 'dan', 'timur', 'kolya', 'yulian']
    for current_user in current_users:
        for new_user in new_users:
            if new_user in current_users:
                if new_user.lower() == current_user.lower():
                   print(f'имя {new_user} использовалось, выберите другое имя')
            else:
        print(f"имя {current_user} доступно для регистрации")

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

Автор решения: mrgervant

Проблема в том, что Вы основным циклом для проверки занятости имени нового пользователя проходитесь по списку старых пользователей и внутри каждой итерации вложенным циклом по списку новых пользователей (5 x 5 = 25 итераций). Хотя достаточно одного цикла по списку новых пользователей с сравнением на вхождение через in.

Если Вам нужно ещё и для проверки приводить старые имена в нижний регистр, при этом не меняя исходный список, то можно создать множество с помощью функции map и проверять с ней:

current_users = ['jaden', 'dan', 'kolya', 'mitya', 'admin']
new_users = ['roma', 'dan', 'timur', 'kolya', 'yulian']
occupied_names = set(map(str.lower, current_users))
for new_user in new_users:
    new_user = new_user.lower()
    if new_user in occupied_names:
        print(f'Имя {new_user} использовалось, выберите другое имя')
    else:
        print(f"Имя {new_user} доступно для регистрации")

Множество можно сформировать генератором коллекции:

occupied_names = {user.lower() for user in current_users}

По примечанию от @CrazyElf list заменен на set: list, set или генератор?

→ Ссылка