сравнение списков игнорирую регистр Python

есть список имен:

current_users = ['admin', 'Garri', 'Tom', 'Kris', 'Mary']

есть новый список:

new_users = ['stas', 'john', 'tom', 'Garri','mary']

Как сравнить игнорирую регистр. Чтоб одинаковые имена не выводились. У меня выводятся одинаковые имена Tom и Mary. Никак не пойму как использовать lower()

current_users = ['admin', 'Garri', 'Tom', 'Kris', 'Mary']
new_users = ['stas', 'john', 'tom', 'Garri','mary']
for name in new_users:
    if name in current_users:
        print('name not available')
    else:
        print(name)

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

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

Можно использовать lower()-метод вот так:

>>> new_lower = [name.lower() for name in new_users] 
>>> current_lower = [name.lower() for name in current_users]
>>> new_lower
['stas', 'john', 'tom', 'garri', 'mary']
>>> current_lower
['admin', 'garri', 'tom', 'kris', 'mary']

а теперь через вашу логику:

for name in new_lower:
    if name in current_lower:
        print(f'{name} not available')
    else:
        print(name)

Вывод будет таким:

stas
john
tom not available
garri not available
mary not available
→ Ссылка
Автор решения: Getteg

спасибо Дмитрий. Теперь понял как делать. В итоге вот что получилось. Получается чтобы сравнить старый список и новый список игнорируя регистр нужно сделать копию обоих списков со строчными буквами. В итоге результат который нужен. Если есть вариант проще пишите.

current_users = ['admin', 'Garri', 'Tom', 'Kris', 'Mary']
new_users = ['stas', 'john', 'tom', 'Garri','mary']
copy_current_user = [name.lower() for name in current_users] 
copy_new_user = [name.lower() for name in new_users]
for name in new_users:                                                      
    if name in copy_current_user: # игнорирую регистр
        print('name not available')
    else:
        print(name)
stas
john
name not available
name not available
name not available
→ Ссылка
Автор решения: Stanislav Volodarskiy

Список current_users преобразуется в множество occupied_names. Проверка принадлежности для set делается быстрее чем для списка. occupied_names содержит имена в нижнем регистре.

Новые имена по одному переводятся в нижний регистр и сверяются с occupied_names. На печать отправляются оригинальные имена:

current_users = ['admin', 'Garri', 'Tom', 'Kris', 'Mary']
new_users = ['stas', 'john', 'tom', 'Garri','mary']

occupied_names = set(map(str.lower, current_users))

for name in new_users:                                                      
    if name.lower() in occupied_names:
        print(f'{name} not available')
    else:
        print(name)
stas
john
tom not available
Garri not available
mary not available
→ Ссылка