如何解决如何在Python的两个列表中检查不区分大小写的字符串
我必须比较两个列表,并且new_users
中的字符串是否已存在于现有列表中,然后系统应突出显示它。我已经编写了以下代码,并且可以正常工作。如果有人可以分享更好的方法来做到这一点,您会感到满意吗?
current_users = ["john","Cindy","Peter","Tesla","Briteny"]
new_users = ["JOHN","Nomy","Tina"]
i = 0
for new_user in new_users:
if new_user.lower() == current_users [i].lower():
print ("The user name is already taken")
else:
print ("The user name is available")
i += 1
解决方法
有一种更好的pythonic方法来获取可用的用户名列表:
availableUsers = list(set([x.lower() for x in current_users])-set([y.lower() for y in new_users]))
- 使用列表理解将所有元素降低,设置两个列表(删除重复项)并减去它们,然后转换回列表
- 要获取可用数量
len(availableUsers)
不可用的选项:
unavailableUsers = list(set([x.lower() for x in new_users])&set([y.lower() for y in current_users]))
,
您可以简单地将lists
转换为sets
,因为这样可以轻松比较它们,从而找到intersection
,symmetric difference
,difference
,{{1} }等。
这是一个例子
union
然后
current_users = ["john","Cindy","Peter","Tesla","Briteny"]
new_users = ["JOHN","Nomy","Tina"]
available_users = list(set(map(lambda x: x.lower(),current_users)) - set(map(lambda x: x.lower(),new_users)))
taken_users = list(set(map(lambda x: x.lower(),current_users)) & set(map(lambda x: x.lower(),new_users)))
print(available_users)
print(taken_users)
输出
for i in taken_users:
print(f'username {i} is already taken')
or
for i in available_users:
print(f'username {i} is available')
,
这是对代码的简单采纳,它仅对所有现有用户使用一组,以检查新用户是否已经存在。另外,我在打印件上添加了用户名。
current_users = ["john","Tina"]
current_users_prepared = {user.lower() for user in current_users}
for new_user in new_users:
if new_user.lower() in current_users_prepared:
print ("The user name '{}' is already taken".format(new_user))
else:
print ("The user name '{}' is available".format(new_user))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。