不区分大小写的列表项比较python

时间:2017-06-19 14:51:16

标签: python python-3.x

我正在通过Python Crash Course一书工作,我正在完成这项任务。

  

执行以下操作以创建一个程序,模拟网站如何确保每个人都拥有唯一的用户名。

     
      
  • 列出五个或更多名为current_users的用户名。
  •   
  • 制作另一个名为new_users的五个用户名列表。确保一个或两个新用户名也在current_users列表中。
  •   
  • 循环浏览new_users列表,查看是否已使用每个新用户名。如果有,则打印一条消息,表明此人需要输入新用户名。如果未使用用户名,请打印一条消息,说明用户名可用。
  •   
  • 确保您的比较不区分大小写。如果已使用'John',则不应接受'JOHN'
  •   

我可以看到一个列表中的用户名是否在另一个列表中。

current_users = ["John", "Admin", "Jack", "Ana", "Natalie"]
new_users = ["Pablo", "Donald", "Calvin", "Natalie", "Emma"]

for username in new_users:
    if username in current_users:
        print("Username unavailable.")
    else:
        print("Username available.")

现在对于不区分大小写的部分我知道.lower()方法,但不知道如何在循环中将列表项转换为小写。我可以做if username.lower() in current_users,这是行不通的,因为我需要以某种方式隐藏current_users。是否有更好的方法,然后在循环之前对两个列表执行.lower()

3 个答案:

答案 0 :(得分:1)

您应该将current_users转换为小写集,然后对每个新用户进行快速比较,只是小写,例如:

current_users = ["John", "Admin", "Jack", "Ana", "Natalie"]
new_users = ["Pablo", "Donald", "Calvin", "Natalie", "Emma"]

current_users_lookup = {user.lower() for user in current_users}
for user in new_users:
    if user.lower() in current_users_lookup:
        print("Username {} unavailable.".format(user))
    else:
        print("Username {} available.".format(user))

哪能得到你:

Username Pablo available.
Username Donald available.
Username Calvin available.
Username Natalie unavailable.
Username Emma available.

答案 1 :(得分:0)

您可以使用lowerCase字符创建一个新列表,然后使用它进行检查。

current_users = ["John", "Admin", "Jack", "Ana", "Natalie"]
new_users = ["Pablo", "Donald", "Calvin", "Natalie", "Emma"]  

current_users_lower = map(str.lower,current_users)
for username in new_users:
  if username.lower() in current_users_lower:
    print("Username unavailable.")
  else:
    print("Username available.")

答案 2 :(得分:0)

在进行测试之前将所有内容转换为小写:

current_users = ["John", "Admin", "Jack", "Ana", "Natalie"]
new_users = ["Pablo", "Donald", "Calvin", "Natalie", "Emma"]

current_users = [x.lower() for x in current_users] 
new_users = [x.lower() for x in new_users]

如果您是Python的新手,则称为List Comprehensions

for username in new_users:
    if username in current_users:
        print("Username unavailable.")
    else:
        print("Username available.")

或者,如果用户名的第一个字母始终大写,则可以使用.title()

for username in new_users:
    if username.title() in current_users:
        print("Username unavailable.")
    else:
        print("Username available.")