我正在学习python作为我的第一门语言,并且我正在使用python速成班作为我的第一本书。
在try it yourself 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 partransform visus uz小写#打印(current_users_lower)new_users =["马球","约翰","跛足的人","约翰","山猫")#new_users = []如果new_users:对于new_users中的new_user:如果new_user.lower()在current_users_lower中:print("用户名区分大小写- username " + new_user + "已被占用,请选择另一个用户名再试一次!")其他:print("注册成功,您的用户名是" + new_user)其他:print("No usernames to input")
必须有一种更优雅的方法来比较两个都是小写的列表。我的方法是复制整个列表并将值转换为更低的值,并将新列表与转换后的列表进行比较,但这似乎是一大堆无用的工作。任何指向正确的简化方向的建议都将非常感谢。按预期工作,但在我看来是混乱的
输出:输入图片描述
您当前计算列表的方式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
检查更快(常数时间而不是线性时间)。