#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))