сравнение списков игнорирую регистр 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 шт):
Можно использовать 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
спасибо Дмитрий. Теперь понял как делать. В итоге вот что получилось. Получается чтобы сравнить старый список и новый список игнорируя регистр нужно сделать копию обоих списков со строчными буквами. В итоге результат который нужен. Если есть вариант проще пишите.
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
Список 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