Как проверить строки без учета регистра в двух списках в Python

#python #list #compare #case

#python #Список #Сравнить #регистр

Вопрос:

Мне пришлось сравнить два списка и выяснить, доступна ли строка в new_users существующем списке, тогда система должна выделить ее. Я написал следующий код, и он сработал. Вы были бы признательны, если бы кто-нибудь мог поделиться еще лучшим способом сделать то же самое?

     current_users = ["john", "Cindy", "Peter", "Tesla", "Briteny"]
    new_users = ["JOHN", "Cindy", "Nomy", "Tesla", "Tina"]
    i = 0
    for new_user in new_users:
        if new_user.lower() == current_users [i].lower():
            print ("The user name is already taken")
        else:
            print ("The user name is available")
        i  = 1
  

Ответ №1:

Существует лучший и pythonic способ получить доступный список имен пользователей:

 availableUsers = list(set([x.lower() for x in current_users])-set([y.lower() for y in new_users]))
  
  • Сделайте все элементы ниже, используя понимание списка, установите оба списка (удалите дубликаты), вычтите их и преобразуйте обратно в список
  • Чтобы получить количество доступных вариантов использования len(availableUsers)

Недоступные с:

 unavailableUsers = list(set([x.lower() for x in new_users])amp;set([y.lower() for y in current_users]))
  

Ответ №2:

Вы можете просто ввести свой lists , sets потому что будет легко сравнить их аналогичным образом, чтобы найти intersection , symmetric difference , difference , union , и т.д.

Вот пример

 current_users = ["john", "Cindy", "Peter", "Tesla", "Briteny"]
new_users = ["JOHN", "Cindy", "Nomy", "Tesla", "Tina"]

available_users = list(set(map(lambda x: x.lower(), current_users)) - set(map(lambda x: x.lower(), new_users)))
taken_users = list(set(map(lambda x: x.lower(), current_users)) amp; set(map(lambda x: x.lower(), new_users)))

print(available_users)
print(taken_users)
  

Затем

 for i in taken_users:
     print(f'username {i} is already taken')

or

for i in available_users:
     print(f'username {i} is available')
  

вывод

 username cindy is already taken
username tesla is already taken
username john is already taken
...
  

Ответ №3:

Это простое принятие вашего кода, который просто использует набор для всех существующих пользователей, чтобы проверить, существует ли новый пользователь. Кроме того, я добавил имя пользователя в печать.

 current_users = ["john", "Cindy", "Peter", "Tesla", "Briteny"]
new_users = ["JOHN", "Cindy", "Nomy", "Tesla", "Tina"]


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

for new_user in new_users:
    if new_user.lower() in current_users_prepared:
        print ("The user name '{}' is already taken".format(new_user))
    else:
        print ("The user name '{}' is available".format(new_user))