Найти - Пользователи
Полная версия: Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков
Начало » Python для новичков » Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков
1 2
dreamer1cc
Добрый день.

Изучаю python по книге, столкнулся с не совсем понятным мне заданием, которое в явном виде не рассматривалось в главе к которой относится задача.

#• Создайте другой список new_users, содержащий пять и более имен пользователей .
# Убедитесь в том, что одно или два новых имени также присутствуют в списке
# current_ users .
#• Переберите список new_users и для каждого имени в этом
# списке проверьте, было ли оно использовано ранее . Если имя уже использовалось,
# выведите сообщение о том, что пользователь должен выбрать новое имя .
# Если имя не использовалось, выведите сообщение о его доступности .
#• Проследите за тем, чтобы сравнение выполнялось без учета регистра символов .
# Если имя 'John’ уже используется, в регистрации имени ‘JOHN’ следует отказать.

Есть списки к примеру:

current_users = [“Andrew”, “JOHHNAS”, “AdMiN”, “FrenchPress”,
“Dreamer1cc”, “XIII”]
new_users = [“AnDrEw”, “Apple”, “xiii”, “frenchpress”, “NewUser”, “CurrentUser”,
“NotCurrentUser”
]

Как выполнить проверку без учета регистра, я могу элементы первого перебираемого списка взять в нижнем регистре как:

 for user in new_users:
    if user.lower() in current_users

но при этом ко всему списку current_users я не могу применить lower. Единственное, что пока придумал - копирование всего списка текущих в новый, перебором, сразу понижая регистр, и потом сравнение с новыми. Мне кажется, что должно быть более красивое решение, но не удаётся его найти.

Использую код:

 current_users = ["Andrew", "JOHHNAS", "AdMiN", "FrenchPress", 
                "Dreamer1cc", "XIII"]
new_users = ["AnDrEw", "Apple", "xiii", "frenchpress", "NewUser", "CurrentUser",
            "NotCurrentUser"
            ]
lower_current_users = []
for cr_user in current_users:
    lower_current_users.append(cr_user.lower())
for user in new_users:
    if user.lower() in lower_current_users:
        print("You must change name. Name " + user + " is already exist!")
    else:
        print("Registration availeble. Pls input your e-mail.")
dreamer1cc
Пока удалось ещё укоротить:
 current_users = ["Andrew", "JOHHNAS", "AdMiN", "FrenchPress", 
                "Dreamer1cc", "XIII"]
new_users = ["AnDrEw", "Apple", "xiii", "frenchpress", "NewUser", "CurrentUser",
            "NotCurrentUser"]
for user in new_users:
    if user.lower() in [cr_user.lower() for cr_user in current_users]:
        print("You must change name. Name " + user + " is already exist!")
    else:
        print("Registration availeble. Pls input your e-mail.")
4kpt_IV
Множества
marvellik
 if user.lower() in current_users or user.upper() in current_users
py.user.next
  
>>> current_users = ["Andrew",
...                  "JOHHNAS",
...                  "AdMiN",
...                  "FrenchPress", 
...                  "Dreamer1cc",
...                  "XIII"]
>>> 
>>> new_users = ["AnDrEw",
...              "Apple",
...              "xiii",
...              "frenchpress",
...              "NewUser",
...              "CurrentUser",
...              "NotCurrentUser"]
>>> 
>>> seen = set(map(str.lower, current_users))
>>> 
>>> for user in new_users:
...     if user.lower() not in seen:
...         print('new:', user)
...     else:
...         print('old:', user)
... 
old: AnDrEw
new: Apple
old: xiii
old: frenchpress
new: NewUser
new: CurrentUser
new: NotCurrentUser
>>>
dreamer1cc
marvellik
А как планируется уйти от AdMiN? Или FrenchPress. И не lower и не upper. К сожалению не подойдёт.
dreamer1cc
py.user.next
Спасибо, это интересно. Пока не дочитал вероятно Очень полезный пример
raue
raue
Во-первых вы пишете ерунду, во-вторых вы пишете её в давно забытый и уже никому не интересный топик.
Не надо так делать.
Rusl
Очень интересный топик. Я по той же книге учусь и это пример сейчас разбираю. В Книге не дали пока ответ на вопрос как понизить регистр в списке, вот мы и мучаемся. Хотя там и не просили пока составлять списки с именами в разных регистрах.
py.user.next
Rusl
В Книге не дали пока ответ на вопрос как понизить регистр в списке, вот мы и мучаемся.
  
>>> lst = ['ABC', 'DEF']
>>> out = list(map(str.lower, lst))
>>> out
['abc', 'def']
>>> out = [i.lower() for i in lst]
>>> out
['abc', 'def']
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB