Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Python для новичков
  • » Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков [RSS Feed]

#1 Фев. 14, 2017 15:34:56

dreamer1cc
Зарегистрирован: 2017-02-14
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

Добрый день.

Изучаю 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 (Фев. 14, 2017 16:00:35)

Офлайн

#2 Фев. 14, 2017 16:12:37

dreamer1cc
Зарегистрирован: 2017-02-14
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

Пока удалось ещё укоротить:

 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.")

Офлайн

#3 Фев. 14, 2017 17:26:26

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

Множества

Офлайн

#4 Фев. 14, 2017 17:36:30

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

 if user.lower() in current_users or user.upper() in current_users

Офлайн

#5 Фев. 15, 2017 00:52:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

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



Офлайн

#6 Фев. 15, 2017 10:55:56

dreamer1cc
Зарегистрирован: 2017-02-14
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

marvellik
А как планируется уйти от AdMiN? Или FrenchPress. И не lower и не upper. К сожалению не подойдёт.

Офлайн

#7 Фев. 15, 2017 11:27:31

dreamer1cc
Зарегистрирован: 2017-02-14
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

py.user.next
Спасибо, это интересно. Пока не дочитал вероятно Очень полезный пример

Офлайн

#8 Июль 13, 2017 11:27:34

raue
Зарегистрирован: 2017-07-13
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

raue
Во-первых вы пишете ерунду, во-вторых вы пишете её в давно забытый и уже никому не интересный топик.
Не надо так делать.

Отредактировано FishHook (Июль 13, 2017 12:24:11)

Офлайн

#9 Окт. 30, 2017 21:24:34

Rusl
Зарегистрирован: 2017-10-23
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

Очень интересный топик. Я по той же книге учусь и это пример сейчас разбираю. В Книге не дали пока ответ на вопрос как понизить регистр в списке, вот мы и мучаемся. Хотя там и не просили пока составлять списки с именами в разных регистрах.



python: 3.6.6 64-bit
система: windows 10, 64-bit
редактор: PyCharm 2018.1.4 (Community Edition)

учебник: Изучаем Python. Программирование игр, визуализация данных, веб-приложения. Мэтиз Эрик.

Офлайн

#10 Окт. 31, 2017 00:37:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков

Rusl
В Книге не дали пока ответ на вопрос как понизить регистр в списке, вот мы и мучаемся.
  
>>> lst = ['ABC', 'DEF']
>>> out = list(map(str.lower, lst))
>>> out
['abc', 'def']
>>> out = [i.lower() for i in lst]
>>> out
['abc', 'def']
>>>



Офлайн

  • Начало
  • » Python для новичков
  • » Проверка вхождения элемента одного списка в другой список. Без учета регистров обоих списков[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version