比较列表和忽略大小写的列表 Python 3.7 简化

Comparing list to list ignoring case in both of them Python 3.7 simplification

我正在学习 python 作为我的第一语言,并且我正在使用 Python 速成课程 作为我的第一本书。

自己尝试 5-10 部分有一个任务是创建两个列表并使用 for 循环将第二个列表与第一个列表进行比较,以检查用户名是否正确在系统中(忽略大小写)。

current_users = ['ana', 'JohN', 'sweeny', 'Bobcat', 'anthony']
current_users_lower = current_users[:]

for x in range(len(current_users)):
    current_users_lower[x] = current_users_lower[x].lower() #nokope listi un partransforme visus uz lowercase

#print(current_users_lower)

new_users = ['polo', 'joHn', 'lamer', 'johan', 'boBcat']
#new_users = []

if new_users:
    for new_user in new_users:
        if new_user.lower() in current_users_lower:
            print("Usernames are case sensitive - username " + new_user + " is taken, please choose another one and try again!")
        else:
            print("Registration successfull, your username is " + new_user)

else:
    print("No usernames to input")

必须有更优雅的方法来比较两个小写字母的列表。 我这样做的方法是复制整个列表并将值转换为较低的值,并将新列表与转换后的列表进行比较,但这似乎是很多无用的工作。 任何指向简化的正确方向的提示都将不胜感激。 按预期工作,但在我看来很乱

输出: enter image description here

您当前计算列表的方式current_users_lower

current_users_lower = current_users[:]

for x in range(len(current_users)):
    current_users_lower[x] = current_users_lower[x].lower() #nokope listi un partransforme visus uz lowercase

可能就是这样:

current_users_lower = set(map(str.lower, current_users))

请注意,它会创建一个 集合 而不是一个列表,因为集合确实是您想要的(您没有使用列表的顺序)并使您的 ... in current_users_lower 检查更快(恒定时间而不是线性时间)。